在javascript中获得时间差异

时间:2015-04-06 18:31:19

标签: javascript datetime time unix-timestamp difference

我希望以天,小时和分钟来区分两个日期。我尝试使用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

2 个答案:

答案 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);
相关问题