获取 javascript 中的时差

Getting time differences in javascript

我想得到两个日期之间的天数、小时数和分钟数。我尝试使用 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);

where SavedReminders[i][7] = 2015-04-06T17:34:00

然而,这会产生一些奇怪的结果,如果我在同一小时(下午 5 点)测试它,那么它似乎可以工作,但是当它变成下午 6 点或晚上 7 点时,我开始得到不正确的结果,好像它没有考虑小时数.

例如,当当前时间为“2015-04-06T19:26:00”并且我 运行 此代码给出结果时:

d.getTime() = 1428344775364

Date.parse(SavedReminders[i][7] = 1428341640000

daydiff = 0

hourdiff = 0

mindiff = 52

getTime() 和 Date.parse return 都是从 1970 年 1 月 1 日开始的 UTC 时间毫秒,但您没有在 UTC 时间中声明两者。所以时区会改变你比较的内容。

换句话说,如果是当地时间下午 3 点和 UTC 时间晚上 7 点,而你 运行 那个代码,当你得到一个新的 Date() 时,你实际上是说它是 UTC 时间晚上 7 点,所以当你把在一个字符串中,表示现在是晚上 7 点,没有时区,它也将其解释为晚上 7 点。最终结果是你有 0 小时差异,因为原始日期在不同的时区,但在转换为 UTC 后指示相同的时间。

希望这是有道理的...处理日期时间值在每种编程语言中都是一场噩梦,在 javascript 中更是如此。如果可能的话,我推荐一个很好的 javascript 日期库,比如 moment.js.

对非常大的数字使用 ~~ 这种技术可能会出现整数溢出问题? (不知道除法运算向右生成了多少个小数点...)

当您使用传统的 Math.floor 时是否遇到相同的错误?

daydiff = Math.floor((d.getTime()-(Date.parse(SavedReminders[i][7]))) / 86400000);