如何迭代几天并考虑夏令时?

时间:2016-02-09 15:19:54

标签: javascript mongodb date

我有一个mongoDB脚本,我每天都在迭代并运行一些计算。我在3月13日左右遇到了一些意想不到的行为,我认为这是夏令时。我的代码看起来像这样:

var startDate = ISODate("2016-01-02T00:00:00Z")
var endDate = ISODate("2019-03-18T00:00:00Z")
while(startDate < endDate){
  print(startDate);
  startDate.setDate(startDate.getDate() + 1)
}

预计输出将持续到3月13日:

ISODate("2016-03-11T00:00:00Z")
ISODate("2016-03-12T00:00:00Z")
ISODate("2016-03-13T00:00:00Z")
ISODate("2016-03-13T23:00:00Z")  <----- here
ISODate("2016-03-14T23:00:00Z")

我希望同时拥有每个日期(T00:00:00)。任何人都可以建议解决这个问题吗?我应该考虑使用其他方法来增加日期吗?

1 个答案:

答案 0 :(得分:2)

您需要始终使用UTC,您可以使用Date.UTC执行此操作。打印数据时,您需要使用toISOString()

&#13;
&#13;
var startDate = Date.UTC(2016, 2, 10);
var endDate = Date.UTC(2016, 2, 30);
while (startDate < endDate) {
  document.write(new Date(startDate).toISOString()+'<br>');
  startDate = startDate +  86400000
}
&#13;
&#13;
&#13;