在不更改GMT时间的情况下为日期添加天数
Add days to a date without changing GMT time
我正在开发一个应用程序,其中使用的所有日期都是GMT日期,例如2015-10-29T00:00:00.000Z
。
我正在使用以下功能为日期添加天数:
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
但是,我刚刚意识到,当穿越夏令时转换日时,它不起作用:
var myDate = new Date('2015-10-24T00:00:00.000Z');
for(i = 0; i<4; i++) {
console.log(JSON.stringify(myDate));
myDate = addDays(myDate, 1);
}
输出:
"2015-10-24T00:00:00.000Z"
"2015-10-25T00:00:00.000Z"
"2015-10-26T01:00:00.000Z"
^
"2015-10-27T01:00:00.000Z"
^
请注意,最后两个日期已经不圆了。
处理这个问题的正确方法是什么?
编辑:实际上我找到了一个肯定更好的解决方案。我离开这里是为了穷尽。
问题是Date.setDate()
在不更改本地时间的情况下增加了一天。但这意味着格林尼治标准时间确实改变了!
在不更改GMT时间的情况下添加一天实际上就像在日期的时间上添加24*3600*1000毫秒一样简单:
function addGMTDays(date, days) {
var result = new Date(date);
result.setTime(result.getTime() + days * 24 * 3600 * 1000);
return result;
}
然后:
var myDate = new Date('2015-10-24T00:00:00.000Z');
for(i = 0; i<4; i++) {
console.log(JSON.stringify(myDate));
myDate = addGMTDays(myDate, 1);
}
输出:
"2015-10-24T00:00:00.000Z"
"2015-10-25T00:00:00.000Z"
"2015-10-26T00:00:00.000Z"
"2015-10-27T00:00:00.000Z"
问题是Date.setDate()
在不更改本地时间的情况下添加了一天。但这意味着格林尼治标准时间确实改变了!
使用Date.setUTCDate()
解决了问题:
function addUTCDays(date, days) {
var result = new Date(date);
result.setUTCDate(result.getUTCDate() + days);
// ^^^ ^^^
return result;
}
然后:
var myDate = new Date('2015-10-24T00:00:00.000Z');
for(i = 0; i<4; i++) {
console.log(JSON.stringify(myDate));
myDate = addUTCDays(myDate, 1);
}
输出:
"2015-10-24T00:00:00.000Z"
"2015-10-25T00:00:00.000Z"
"2015-10-26T00:00:00.000Z"
"2015-10-27T00:00:00.000Z"
这也将持续数月:
function addMonths(date, months) {
var result = new Date(date);
result.setUTCMonth(result.getUTCMonth() + months);
return result;
}
相关文章:
- 将日期添加到日期输入字段Angular
- 使用javascript将两个输入的日期添加在一起
- 在循环中为日期添加天数,javascript
- 使用奇怪的控制台日志结果向输入日期添加天数
- jQuery将日期添加到输入中,但仅当它's是空的
- 在 javascript 中为日期添加时间
- 在 Java 脚本中向日期添加变量编号
- 将日期添加到日期以使明天成为当前日期 - Javascript
- 使用AngularJS将当前日期添加到帖子中
- 如何使用 JavaScript 从当前日期添加一年
- 使用Greasemonkey为页面上的日期添加粗体标签
- Javascript为未来日期添加时间
- 是否有一个内置函数可以将创建日期添加到couchDB中的文档中
- 使用jquery或Javascript向选定日期添加天数
- 使用JavaScript为日期添加1年
- 将日期添加到用php和javascript编写的时钟和日期脚本中
- 将开始日期和结束日期添加为高图中的X轴标签
- 使用jquery日期选择器向日期添加自定义属性
- 在不更改GMT时间的情况下为日期添加天数
- Javascript日期添加