javascript - 考虑夏令时计算两个日期之间的差异

标签 javascript date clock hour

给定开始日期和天数,我需要显示结束日期 = 开始日期 + 天数。

所以我做了这样的事情:

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/

相关文章:

javascript - Jquery val 长度不起作用

Javascript:如何检查/删除文档头部的css样式标签

java - 如何将 java.util.Date 转换为 java.sql.Date?

java - 在 00 :00 format? 中创建一个以秒为单位的递增计时器

javascript - 我怎样才能使自动播放而不是 slider 上的单击功能

javascript - 启用和禁用基于 jQuery 中的偶数的 Span 类

json - +0000 在 twitter API 返回的日期上下文中是什么意思?

r - 如何合并 R 中的两个日期向量?

python - time.clock() 无法正确返回时间

c# - 如何用当前时间不断更新标签?