我正在开发一个应用程序,其中使用的所有日期都是GMT日期,例如2015-10-29T00:00:00.000Z.
我正在使用以下功能将日期添加到日期:
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是,我刚刚意识到在穿越夏令时更改日时它不起作用:
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);
}
Run Code Online (Sandbox Code Playgroud)
输出:
"2015-10-24T00:00:00.000Z"
"2015-10-25T00:00:00.000Z"
"2015-10-26T01:00:00.000Z"
^
"2015-10-27T01:00:00.000Z"
^
Run Code Online (Sandbox Code Playgroud)
请注意,最后两个日期不再是圆形.
处理这个问题的正确方法是什么?
问题是在不改变当地时间Date.setDate()的情况下增加了一天。但这意味着 GMT 时间确实会改变!
使用Date.setUTCDate()解决了问题:
function addUTCDays(date, days) {
var result = new Date(date);
result.setUTCDate(result.getUTCDate() + days);
// ^^^ ^^^
return result;
}
Run Code Online (Sandbox Code Playgroud)
然后 :
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);
}
Run Code Online (Sandbox Code Playgroud)
输出这个:
"2015-10-24T00:00:00.000Z"
"2015-10-25T00:00:00.000Z"
"2015-10-26T00:00:00.000Z"
"2015-10-27T00:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
这也将持续数月:
function addMonths(date, months) {
var result = new Date(date);
result.setUTCMonth(result.getUTCMonth() + months);
return result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |