为什么两个日期之间的差异不能给我一整天的时间

时间:2010-05-02 08:19:25

标签: javascript

有人可以向我解释一下。来自jconsole ...

from = new Date('01/01/2010')
Fri Jan 01 2010 00:00:00 GMT-0800 (PST)

thru = new Date('06/07/2010')
Mon Jun 07 2010 00:00:00 GMT-0700 (PST)

(thru - from) / (1000 * 24 * 60 * 60)
156.95833333333334

为什么我不能整整一天?如何计算两个日期之间的差异?

非常感谢。

3 个答案:

答案 0 :(得分:10)

你的第一个日期是格林威治标准时间-0800,第二个日期是格林尼治标准时间-0700 - 这是一个1小时的差异,一天是0.041666 - 正是你离开的数量。

这可能与夏令时差异有关,因为你的一个日期是一月份,另一个是六月份;因此,一个将是夏令时,另一个将是它。 (而GMT -0800在夏令时不是PST;在夏令时,GMT -0700是PST。)

您可以安全地简单地舍入到最接近的整数天,因为夏令时在任何一个方向上的变化都不会超过一个小时。

答案 1 :(得分:1)

即使存在夏令时(或只是时区)差异,也应该获得日期之间的整天天数,并且没有可怕的四舍五入。舍入对我来说是可怕的,因为它正在接受我不喜欢的答案并且捏造它,而这正好计算出我想要计算的内容。

// assuming this date and the other date are date only
Date.prototype.daysSince = function(other) {
    // get the timezone difference between then and now (in minutes)
    var dstDiff = other.getTimezoneOffset() - this.getTimezoneOffset();
    // convert the timezone different to milliseconds
    var dstDiffMs = dstDiff * 60 * 100;
    // get the milliseconds difference between the two dates
    var diff = this.valueOf() - other.valueOf() + dstDiffMs;
    // convert to days
    var days = diff / 86400000; // or 60*60*24*1000 if you prefer
    return days;
};

答案 2 :(得分:0)

Javascript不像人们期望的那样进行浮点数学运算。要想看到你想看到的东西并不够聪明。 如需简单修复

Math.ceil((thru - from) / (1000 * 24 * 60 * 60))

其次,日期之间的毫秒数会有所不同。 您可以使用

进行标准化
thru.setHours(0,0,0,0);

from.setHours(0,0,0,0);

使用之前