考虑到开始日期和天数,我需要显示结束日期=开始日期+天数。
所以我做了这样的事情:
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
,我会显示一个弹出窗口,说[某事]。
现在这是真正的问题......我似乎无法找到任何算法,说明时钟在X年回归。
示例...... 2014年当天是10月26日。 2016年是10月30日(https://www.gov.uk/when-do-the-clocks-change)。为什么?这个日期看起来是随机的,但我认为不是。那么......时钟何时返回/前进?
编辑:所有答案/评论都与如何解决问题有关。但是......我已经过了那个阶段。现在我只有一个关于“计算时钟变化的日子怎么样?”的痒。
答案 0 :(得分:2)
要查找整天中两个日期之间的差异,请创建日期对象,从另一个中减去一个,然后在一天内舍入毫秒数。剩下的只有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对象考虑了夏令时(以为某些浏览器中存在错误)。
答案 1 :(得分:1)
我更喜欢这样添加日子:
var startDate = //someDate;
var endDate = new Date(startDate.getFullYear(),
startDate.getMonth(),
startDate.getDate()+1);
通过这种方式,您不必担心日历中的日子。
此代码会添加1天,如果您想要添加更多内容,请更改startDate.getDate()+1
startDate.getDate()+NUMBER_OF_DAYS
,即使您是在月份的最后一天,即10月31日,它也能正常工作。
但也许你可以使用比我更优雅的@RobG解决方案