我使用以下代码来确定一个月内的星期日总数,但是它会给出错误的结果
function sundaysInMonth(start) {
var dat = new Date('1 ' + start);
var y = dat.getFullYear();
var m = dat.getMonth() + 1;
var days = new Date( y,m,0 ).getDate();
var sundays = [ 8 - (new Date( m + '/01/' + y ).getDay()) ];
for ( var i = sundays[0] + 7; i < days; i += 7 ) {
sundays.push( i );
}
return sundays.length;
}
当我调用console.log(sundaysInMonth('September 2013'));
之上的函数时,它会返回4
,而September 2013
则会有5个星期日。
我从这个post
获得了代码答案 0 :(得分:4)
此计算不需要循环。
function sundaysInMonth(start) {
var d = new Date('1 ' + start); // May not parse in all browsers
var ndays = new Date( d.getFullYear(), d.getMonth()+1, 0 ).getDate();
return Math.floor((ndays + (d.getDay() + 6) % 7) / 7);
}
2013年所有月份的测试:http://jsfiddle.net/rGN28/2/
答案 1 :(得分:3)
function sundaysInMonth(sMonthAndYear) {
// Get the year and month as integers
var dDate = new Date('1 ' + sMonthAndYear);
var y = dDate.getFullYear();
var m = dDate.getMonth() + 1;
// Get the number of days in the month
var iDayCount = new Date( y,m,0 ).getDate();
// Find the first Sunday
var iFirstSunday = (8 - dDate.getDay());
if (iFirstSunday > 7) {iFirstSunday = 1};
// Calculate the total number of Sundays in the month
var iSundayCount = Math.ceil ((iDayCount + 1 - iFirstSunday) / 7);
// Return the count
return iSundayCount;
}
答案 2 :(得分:1)
检查一下。我刚修复了你的代码中的问题
function sundaysInMonth(start) {
var dat = new Date('1 ' + start);
var y = dat.getFullYear();
var m = dat.getMonth() + 1;
var days = new Date( y,m,0 ).getDate();
var sundays = [ (8 - (new Date( m + '/01/' + y ).getDay())) % 7 ];
for ( var i = sundays[0] + 7; i < days; i += 7 ) {
sundays.push( i );
}
return sundays.length;
}
在数组变量sundays
中,我们需要初始存储星期日的第一天值。几个月有一个小虫子,第1天是星期天。例如,在您的问题September 2013
中
在这几个月中,您的代码将存储8
而不是1
sundays
数组作为第一个星期日。我修好了