我想在一个循环中从月份的某天开始。代码适用于前几天,从那时起它将返回随机日期。
这里有任何帮助吗?
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
...
...
答案 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);
var now = new Date();
var initDate = new Date(now.getYear() + 1900, 0);