2

我正在尝试从一个月中的某一天开始循环获取日期。该代码在前几天有效,从那时起它返回随机日期。

这里有什么帮助吗?

var now = new Date();
var initDate = new Date(now.getYear() + 1900, 0);

for (var i = 1 ; i <366 ; i++) {
    var day = dateFromDay(i, initDate);
    document.write(" Day " + i + " : " + day);
    document.write("<br>");
}

function dateFromDay(day, initDate) {
    var months = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", 
                   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ];

    var cur = new Date(initDate.setDate(day));
    cur = months[cur.getMonth()] + " " + cur.getDate();
    return cur;
}

输出:

...
...
Day 29 : Jan 29
Day 30 : Jan 30
Day 31 : Jan 31
Day 32 : Feb 1
// From here the output gets messed  up
Day 33 : Mar 4
Day 34 : Apr 3
Day 35 : May 5
Day 36 : Jun 5
Day 37 : Jul 7
Day 38 : Aug 7
Day 39 : Sep 8
Day 40 : Oct 10
Day 41 : Nov 10
Day 42 : Dec 12
Day 43 : Jan 12
Day 44 : Feb 13
...
...
4

3 回答 3

1

调用setDate()您的“initDate”变量会更新该日期。因此,一旦您从一月溢出到二月,下一个调用将立即溢出到下个月

您不需要“initDate”变量。在每次调用函数时,从新构建的日期开始,即当年、一月 (0) 以及您想要的任何日期。生成的 Date 实例将是您的日期。

因此:

function dayNumberToDate( dayNumber ) {
  var thisYear = new Date().getFullYear(); // no need to add 1900
  return new Date(thisYear, 0, dayNumber);
}

alert(dayNumberFromDate( 271 )); // alerts Thu Sep 27 2012 00:00:00 GMT-0500 (CDT) (for me)
于 2012-10-12T13:35:53.150 回答
0

将下面给出的代码移到您的 for 循环中,在此行之前var day = dateFromDay(i, initDate);

 var now = new Date();
 var initDate = new Date(now.getYear() + 1900, 0);
于 2012-10-12T13:40:48.590 回答
0

更改以下行:

var cur = new Date(initDate.setDate(day));

对于这个:

var cur = new Date();
cur.setDate( initDate.getDate()+day );
于 2012-10-12T13:37:46.770 回答