有人可以向我解释一下。来自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
为什么我不能整整一天?如何计算两个日期之间的差异?
非常感谢。
答案 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);
使用之前