使用javascript增加日期无法正常工作。
该功能以前运行良好,但我不知道为什么现在不起作用。
实际结果:
4月30日星期二
5月1日星期三
6月1日星期六
7月03日,周三
8月03日星期六
9月04日星期三
星期日,十月06
预期:
4月30日星期二
5月1日星期三
5月2日,周四
5月03日星期五
5月04日星期六
5月5日星期日
星期一,五月06
var dt = new Date();
var nextDay = new Date(dt);
nextDay.setDate(dt.getDate() + 1);
document.getElementById("datetime1").innerHTML = ("0" + nextDay).substring(1, 12);
nextDay.setDate(dt.getDate() + 2);
document.getElementById("datetime2").innerHTML = ("0" + nextDay).substring(1, 12);
nextDay.setDate(dt.getDate() + 3);
document.getElementById("datetime3").innerHTML = ("0" + nextDay).substring(1, 12);
nextDay.setDate(dt.getDate() + 4);
document.getElementById("datetime4").innerHTML = ("0" + nextDay).substring(1, 12);
nextDay.setDate(dt.getDate() + 5);
document.getElementById("datetime5").innerHTML = ("0" + nextDay).substring(1, 12);
nextDay.setDate(dt.getDate() + 6);
document.getElementById("datetime6").innerHTML = ("0" + nextDay).substring(1, 12);
nextDay.setDate(dt.getDate() + 7);
document.getElementById("datetime7").innerHTML = ("0" + nextDay).substring(1, 12);
nextDay.setDate(dt.getDate() + 8);
pre {
display: block;
unicode-bidi: embed;
font-family: monospace;
white-space: pre;
}
<pre id="datetime1"></pre>
<pre id="datetime2"></pre>
<pre id="datetime3"></pre>
<pre id="datetime4"></pre>
<pre id="datetime5"></pre>
<pre id="datetime6"></pre>
<pre id="datetime7"></pre>
答案 0 :(得分:1)
基本问题是您基于nextDay
更新了dt
:
nextDay.setDate(dt.getDate() + 1);
可能会更改其月份,然后再次重复执行:
nextDay.setDate(dt.getDate() + 2);
所以:
nextDay.setDate(dt.getDate() + 1);
:将4月29日定为30天,将其定为4月30日。nextDay.setDate(dt.getDate() + 2);
:将4月30日定为31日,即5月1日(4月只有30天)nextDay.setDate(dt.getDate() + 3);
:将5月1日设置为第32天,使其成为6月1日(可能只有31天)nextDay.setDate(dt.getDate() + 4);
:将第33天设置为6月1日,即7月3日(6月只有30天) ...等等。将dt.getDate()
与nextDay.setDate
混在一起会让您大跌眼镜,因为dt
停留在四月,而nextDay
移到下个月。
相反,只需更新同一日期实例,将其向前移动1,并使用循环而不是重复自己:
var dt = new Date();
var nextDay = new Date(+dt);
for (var n = 1; n <= 7; ++n) {
nextDay.setDate(nextDay.getDate() + 1);
document.getElementById("datetime" + n).innerHTML = ("0" + nextDay).substring(1, 12);
}
pre {
display: block;
unicode-bidi: embed;
font-family: monospace;
white-space: pre;
}
<pre id="datetime1"></pre>
<pre id="datetime2"></pre>
<pre id="datetime3"></pre>
<pre id="datetime4"></pre>
<pre id="datetime5"></pre>
<pre id="datetime6"></pre>
<pre id="datetime7"></pre>
旁注:
var nextDay = new Date(dt);
不是克隆日期的可靠方法。它可以在某些JavaScript引擎上工作,但不能在其他引擎上工作。要可靠地克隆日期,请使用getTime
(或一元+
)中的毫秒值(自Epoch):
var nextDay = new Date(dt.getTime());
// or
var nextDay = new Date(+dt);
我已经在上面完成了
注释2:
("0" + nextDay).substring(1, 12);
是一种将日期转换为字符串的奇怪方法。我可能会改用String(nextDay).substring(0, 11)
或日期格式化库。
答案 1 :(得分:-1)
代替
FROM
您可以尝试
nextDay.setDate(dt.getDate() + 3);