近期参与的项目中涉及到时间计算的问题,就是首先获取到数据库中最新数据的日期,并根据这个时间去获取一个月前、3月前、一年前等时间段的数据,并且要显示每个时间段的最开始的时间。关于时间的处理,对于后台开发的攻城师们来说可能是小case中的小case,代码量可能也是一两行就搞定,然前端童鞋要用js去处理相对来说可能会比较麻烦,但是根据需求,有时候无可避免的必须要去进行处理。这里记录的是个人觉得相对来说比较简便的方法,代码如下所示:这里预设获取到最新数据的日期时间为:2016年12月31日。
1、首先是获取一个月前的时间的代码:
2、下面的是获取三个月前的时间的代码:
代码中的date、date1是个时间对象,首先通过set的时间方法把时间设置为获取的最新数据的时间。设置时间后通过get时间方法获取到设置的时间的年月日,对应代码中的oldYear、oldMonth、oldDay。注意:代码中的date.setMonth(12-1),里面的参数12是表示我们获取的最新数据的时间月份是12月,减1时因为国际时间11代表我们北京时间12月份,所以要减1。然后设置一个月前、三个月前的日期,通过date.setMonth(oldMonth-1)即可计算一个月前、三个月前的日期。设置后必须重新通过get方法获取设置后的时间(注意月份需要再加上1方是我们的北京时间),即能获取到一个月前、三个月前的时间。上面代码的运行效果如下:
这里说下date.setMonth(oldMonth-1)的时间计算。这里用月份减1,实际上是减去上一个月的天数的时间。比如说最新时间是2015年3月31日,则实际通过月份减1后再获取到的一个月前的日期为2015年3月3日。这是因为2015年的2月份只有28天,则这个时间计算是减去上一个月的天数28天,则31-28=3,所以返回的时间是2015年3月3日。当然这里你可以用date.setDate(oldDay-30)的方法设死减去30天,则返回的时间是2015年3月1日。
总之,关于时间加减,是用setMonth方法进行处理还是用setDate方法进行处理,全凭个人决定。对时间进行处理时需要注意的月份是2月,处理时要注意下,多测试下2月份的时间设置;还有要注意的是有无31号的月份的时间。只要理解了时间计算的原理,运用起来就不是问题啦。