在一个循环中的一年中的一天

时间:2012-10-12 13:31:27

标签: javascript

我想在一个循环中从月份的某天开始。代码适用于前几天,从那时起它将返回随机日期。

这里有任何帮助吗?

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
...
...

3 个答案:

答案 0 :(得分:1)

在“initDate”变量上调用setDate() 更新该日期。因此,一旦你将1月份溢出到2月份,下一个电话会立即泄漏到 next 月份。

您不需要“initDate”变量。从当前年度,1月份(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)

答案 1 :(得分:0)

更改以下行:

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

这个:

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

答案 2 :(得分:0)

在此行var day = dateFromDay(i, initDate);

之前的for循环中移动下面给出的代码
 var now = new Date();
 var initDate = new Date(now.getYear() + 1900, 0);