2014-10-28 271 views
1

在过去的几天里,我一直在迭代一系列日期。我正在使用下面的一段代码来测试:通过JavaScript中的日期范围迭代

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"); 

让我吃惊,它的工作如预期。现在我想知道这是一个正常行为还是日期错误?

我会很感激,如果有人能够启发我。

回答

0

,这是因为有时间上的变化,检查第一天是在格林尼治标准时间夏令时和(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); 
} 
+0

时间上的变化意味着日期功能的变化?我愿意接受你的回答。但是,你能解释一下为什么它使用上述格式'd/m/Y'并且在使用'Y-m-d'时失败了吗?不要误会我的意思,我不挑剔。我只想知道为什么事情就像他们一样。 – Nexo 2014-10-28 13:08:22

+0

对不起,我不能帮你。我从经验中学习到,使用日期时,使用utc并以格式/时区渲染必须。 – dariogriffo 2014-10-28 14:02:30