在Javascript中遍历一系列日期

Iterate through a range of dates in Javascript

本文关键字:一系列 日期 遍历 Javascript      更新时间:2023-09-26

在过去的几天里,我一直在努力迭代一系列日期。我使用以下代码进行测试:

var current_date = new Date("2014-08-01");
var end_date = new Date("2014-10-31");
var end_date_time = end_date.getTime();
while (current_date.getTime() <= end_date_time) {
    document.write(current_date + '<br>');
    current_date.setDate(current_date.getDate()+1);
}

对我来说,这看起来是正确的,但有一个问题。它错过了最后一天。我扭转了这段代码,使用了for循环,在循环中定义了新的Date,以及所有你能想象到的事情。有一件事保持不变。最后一天不见了!

出于好奇,我使用了以下格式创建日期:

var current_date = new Date("08/01/2014");
var end_date = new Date("10/31/2014");

令我惊讶的是,它不出所料地发挥了作用。现在我想知道这是一种正常的行为还是Date中的错误?

如果有人能启发我,我将不胜感激。

这是因为时间发生了变化,请检查第一天是否在GMT夏令时,最后一天是否在(GMT标准时间)

所以你的代码最好使用UTC

var current_date = new Date("2014-08-01");
current_date = new Date(current_date.getUTCFullYear(), current_date.getUTCMonth(), current_date.getUTCDate(),  current_date.getUTCHours(), current_date.getUTCMinutes(), current_date.getUTCSeconds());
var end_date = new Date("2014-10-31");
end_date = new Date(end_date.getUTCFullYear(), end_date.getUTCMonth(), end_date.getUTCDate(),  end_date.getUTCHours(), end_date.getUTCMinutes(), end_date.getUTCSeconds());
var end_date_time = end_date.getTime();

while (current_date <= end_date) {
    document.write(current_date + '<br>');
    current_date.setDate(current_date.getDate()+1);
}