我正在开发一个应用程序,其中使用的所有日期都是GMT日期,例如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()
请注意,最后两个日期不再是圆形。
处理这个问题的正确方法是什么?
答案 0 :(得分:3)
编辑:实际上我发现了一个绝对更好的解决方案。我为了穷举而离开了这个。
问题是function addGMTDays(date, days) {
var result = new Date(date);
result.setTime(result.getTime() + days * 24 * 3600 * 1000);
return result;
}
在不更改本地时间的情况下增加了一天。但这意味着GMT时间确实在变化!
在不更改GMT时间的情况下添加一天实际上就像在日期时间内添加24 * 3600 * 1000毫秒一样简单:
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"
输出:
<html>
<head>
<link type="text/css" rel="stylesheet" href="navigation1.css" />
</head>
<body>
<p id="demo"></p>
<button onclick="getDaysInMonth()">try it</button>
<script type="text/javascript">
var nacht = "nacht";
var morgen = "morgen";
var middag = "middag";
var avond = "avond";
答案 1 :(得分:0)
问题是Date.setDate()
在不更改本地时间的情况下增加了一天。但这意味着GMT时间确实在变化!
使用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;
}