JavaScript计算2个日期之间相差天数

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

思路无非是先获取2个时间点的时间戳,通过时间戳的差值进行时间计算来获取相差的天数,网上几乎都是这样的写法,如下:


var diff = parseInt(Math.abs(date1 - date2) / 1000 / 60 / 60 /24) //把相差的毫秒数转换为天数  

date1和date2分别是2个日期的时间戳,因为加上了绝对值,所以不分先后。


但是parseInt一般都是将字符串转化为Int类型,而Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24计算出的结果很明显是浮点类型数据,虽然从实际效果上确实没什么区别,不过我还是偏向于这样写:


Math.floor(Math.abs(k1 - k2) / 1000 / 60 / 60 /24)
两种方法不同,但是结果一样,都是向下去整,但是这样的方法只适合用来获取绝对的时间差,而很多情况下这与我们所期望得到的结果不一致,以我现在做的项目为例:


我现在知道起始时间是2015/5/8 15:31:57,结束时间是2015/5/28 10:34:46,我想知道这2个时间点之间相差多少天,这个时候用上面的方法就不妥了,上面的方法算出来是19,而实际上应该是20,这是一个四舍五入的问题,所有我们应该稍加修改一下方法,使计算出的结果四舍五入成我们想要的整数天数,如下:


Math.floor(Math.abs(k1 - k2) / 1000 / 60 / 60 /24 + 0.5);

这样计算出的结果才是我想要的结果。


至于js转换成时间戳的方法,如果是Date对象,则直接调用getTime()方法就可以获得毫秒时间戳。如果是时间字符串,则用正则表达式匹配将字符串替换成js所识别的标准格式,new一个Date对象即可。