首页 > 解决方案 > Javascript 日期对象(新对象与 SetUTCDate)getTime 差异由于夏令时

问题描述

我有一个包含选择 dateCells 的 while 循环,由于夏令时即将到来,它现在正在中断,我想知道是否有更好的方法来修复它..(我的计划在代码下方)

function doLoop(startDateObj, endDateObj){
  console.log("start: " + startDateObj)
  console.log("end: " + endDateObj)
  console.log("-----")

  var counterDateObj = new Date(startDateObj);
  while (true){
    if (counterDateObj.getTime()>endDateObj.getTime()){
      // hit! reached after end date

      console.log("=> hit");
      console.log("counter: "+counterDateObj)
      console.log("getTime(): "+counterDateObj.getTime()+" > "+endDateObj.getTime())

      break;
    };

    console.log(counterDateObj);
    counterDateObj.setUTCDate(counterDateObj.getUTCDate() + 1);
  };
};

在夏令时之前和之后设置值会引发整个事情:

doLoop(new Date('03/07/09'), new Date('03/10/09'));

VM2826:2  start: Sat Mar 07 2009 00:00:00 GMT-0500 (Eastern Standard Time)
VM2826:3  end: Tue Mar 10 2009 00:00:00 GMT-0400 (Eastern Daylight Time)
VM2826:4  -----
VM2826:18 Sat Mar 07 2009 00:00:00 GMT-0500 (Eastern Standard Time)
VM2826:18 Sun Mar 08 2009 00:00:00 GMT-0500 (Eastern Standard Time)
VM2826:18 Mon Mar 09 2009 01:00:00 GMT-0400 (Eastern Daylight Time)
VM2826:11 => hit
VM2826:12 counter: Tue Mar 10 2009 01:00:00 GMT-0400 (Eastern Daylight Time)
VM2826:13 getTime(): 1236661200000 > 1236657600000

我目前的计划是:如果它大于 endDate 时间戳 + 5 额外小时(以毫秒为单位),或类似的东西..

谁能想到更好的方法?我的计划看起来很不错 ehhhh- 不好

标签: javascriptdate

解决方案


推荐阅读