javascript函数返回一年中所有星期日的日期数组

时间:2011-12-15 06:32:50

标签: javascript

我正在javascript中编写一个函数,它将返回所有星期日的日期数组。 下面你可以看到我的代码:

function getDefaultOffDays(year){
var offdays=new Array();
i=0;
for(month=1;month<12;month++)
{
    tdays=new Date(year, month, 0).getDate();

    for(date=1;date<=tdays;date++)
    {
        smonth=(month<10)?"0"+month:month;
        sdate=(date<10)?"0"+date:date;
        dd=year+"-"+smonth+"-"+sdate;

        day=new Date();
        day.setDate(date);
        day.setMonth(month);
        day.setFullYear(year);

        if(day.getDay() == 0 )
             {              
               offdays[i++]=dd;

             }
    }
}

return offdays;
}

问题是返回的数组给出了随机日期而不是星期日的唯一日期:( 我错过了什么?

4 个答案:

答案 0 :(得分:8)

如果检查结果,可以看到它实际上不是随机的。它返回2月份的日期,即2月份的星期日,等等。

month对象的Date属性基于零,而不是基于属性。如果更改此行,该函数将返回正确的日期:

day.setMonth(month - 1);

此外,循环仅从1到11运行,您还需要包含12月:

for (month=1; month <= 12; month++)

另一种方法是找到第一个星期日,然后一步一步向前推进七天:

function getDefaultOffDays2(year) {
  var date = new Date(year, 0, 1);
  while (date.getDay() != 0) {
    date.setDate(date.getDate() + 1);
  }
  var days = [];
  while (date.getFullYear() == year) {
    var m = date.getMonth() + 1;
    var d = date.getDate();
    days.push(
      year + '-' +
      (m < 10 ? '0' + m : m) + '-' +
      (d < 10 ? '0' + d : d)
    );
    date.setDate(date.getDate() + 7);
  }
  return days;
}

答案 1 :(得分:1)

一个错误:

for(month=1;month<12;month++)

仅仅11个月。

如果您需要全年,您需要:

for(month=0;month<12;month++)

因为一年有12个月。你甚至可以将它与Guffa的答案结合起来。

答案 2 :(得分:0)

月份基于零,就像日子一样,所以如果月份是0那么它就是Jan,所以改变你的代码如下,

function getDefaultOffDays(year){ 
var offdays=new Array();
i=0;
for(month=0;month<12;month++) { 
    tdays=new Date(year, month, 0).getDate(); 
    for(date=1;date<=tdays;date++)     {
        smonth=(month<10)?"0"+(month+1):(month+1);
        sdate=(date<10)?"0"+date:date;
        dd=year+"-"+smonth+"-"+sdate;
        var day=new Date(year,month,date);
        if(day.getDay() == 0 )              {
            offdays[i++]=dd;
        }
      }
    }
    return offdays; 
  }

答案 3 :(得分:0)

此功能有错误 错误代码:

tdays=new Date(year, month, 0).getDate(); 

替换为:

tdays=new Date(year, month, 1).getDate(); 

因为0(天)返回上个月