我正在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;
}
问题是返回的数组给出了随机日期而不是星期日的唯一日期:( 我错过了什么?
答案 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(天)返回上个月