我在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;
}
Run Code Online (Sandbox Code Playgroud)
问题是返回的数组给出了随机日期而不是星期日的唯一日期:( mi错过了一些东西?
如果检查结果,可以看到它实际上不是随机的.它返回2月份的日期,即2月份的星期日,依此类推.
对象的month属性Date基于零,而不是基于属性.如果更改此行,该函数将返回正确的日期:
day.setMonth(month - 1);
Run Code Online (Sandbox Code Playgroud)
此外,循环仅从1到11运行,您还需要包含12月:
for (month=1; month <= 12; month++)
Run Code Online (Sandbox Code Playgroud)
另一种方法是找到第一个星期日,然后一步一步向前推进七天:
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3266 次 |
| 最近记录: |