我希望以天,小时和分钟来区分两个日期。我尝试使用1970年1月1日的ms这样做:
var d = new Date()
daydiff = ~~((d.getTime()-(Date.parse(SavedReminders[i][7]))) / 86400000);
hourdiff = ~~((d.getTime() - (Date.parse(SavedReminders[i][7]))) / 3600000);
mindiff = ~~((d.getTime() - (Date.parse(SavedReminders[i][7]))) / 60000);
其中SavedReminders [i] [7] = 2015-04-06T17:34:00
然而,这给出了一些奇怪的结果,如果我在同一小时(下午5点)测试它似乎工作,但是当它变成下午6点或下午7点时,我开始得到不正确的结果,好像它没有考虑小时数。 / p>
例如,当前时间为'2015-04-06T19:26:00'并且我运行此代码时会显示结果:
d.getTime()= 1428344775364
Date.parse(SavedReminders [i] [7] = 1428341640000
daydiff = 0
hourdiff = 0
mindiff = 52
答案 0 :(得分:1)
getTime()和Date.parse在UTC时间内从1970年1月1日返回毫秒,但是你没有在utc时间内声明这两者。所以时区会改变你所比较的东西。
换句话说,如果它是当地时间下午3点和UTC时间晚上7点,并且你运行该代码,当你得到一个新的Date()时,你实际上是在UTC时间晚上7点说,所以当你输入一个表明它的字符串时晚上7点没有时区,它也解释为晚上7点。最终结果是您有0小时的差异,因为原始日期位于不同的时区,但指示转换为UTC后的相同时间。
希望这是有道理的......处理日期时间值是每种编程语言中的噩梦,在javascript中也是如此。如果可能的话,我推荐一个很好的javascript日期库,比如moment.js。
答案 1 :(得分:0)
使用~~这种技术使用非常大的数字可能出现整数溢出问题? (没有人知道除法运算产生的右边有多少个小数点......)
使用传统的Math.floor时会出现相同的错误吗?
daydiff = Math.floor((d.getTime()-(Date.parse(SavedReminders[i][7]))) / 86400000);