给定开始日期和天数,我需要显示结束日期 = 开始日期 + 天数。
所以我做了这样的事情:
var endDate=new Date(startDate.getTime()+ONE_DAY);
一切正常,除了 10 月 25 日和 26 日少了一天。
例如:
2014-01-01 + 2 days = 2014-01-03
2014-10-25 + 2 days = 2014-10-26 (here is the case I need to treat).
出现这种差异是因为时钟倒退了 1 小时。实际上 2014-10-27 00:00:00
变成了 2014-10-26 23:00:00
。
一个简单的解决方案是在另一个小时(例如凌晨 3 点)进行计算。但我只想在发生这种情况时显示一条注释。
例如,如果用户输入 2014-10-25
,我会显示一个弹出窗口,上面写着 [something]。
现在这是真正的问题......我似乎找不到任何算法来说明时钟何时回到 X 年。
示例...在 2014 年,这一天是 10 月 26 日。 2016 年是 10 月 30 日 (https://www.gov.uk/when-do-the-clocks-change)。为什么?这个日期看起来是随机的,但我不认为它是。那么...时钟什么时候倒退/前进?
编辑:所有答案/评论都有助于解决问题。但是……我已经过了那个阶段了。现在我只对“改变时钟的日子到底是怎么计算的?”感到头疼。
最佳答案
要计算整日中两个日期之间的差异,请创建 Date 对象,从另一个中减去一个,然后除以一天中的毫秒数并循环。余数只会在夏令时 1 小时后结束,因此会四舍五入到正确的值。
您可能还需要一个将字符串转换为日期的小函数:
// Return Date given ISO date as yyyy-mm-dd
function parseISODate(ds) {
var d = ds.split(/\D/);
return new Date(d[0], --d[1], d[2]);
}
获取天数差异:
function dateDiff(d0, d1) {
return Math.round((d1 - d0)/8.64e7);
}
// 297
console.log(dateDiff(parseISODate('2014-01-01'), parseISODate('2014-10-25')));
如果你想在日期中添加天数,可以这样做:
// Add 2 days to 2014-10-25
var d = new Date(2014, 9, 25);
d.setDate(d.getDate() + 2);
console.log(d); // 2014-10-27
内置的 Date 对象考虑了夏令时(认为在某些浏览器中存在错误)。
关于javascript - 考虑夏令时计算两个日期之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26211649/