Javascript 一个月内的星期日总数

Javascript 一个月内的星期日总数,javascript,Javascript,我使用下面的代码来确定一个月内的星期日总数,但是它给出了错误的结果 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 =

我使用下面的代码来确定一个月内的星期日总数,但是它给出了错误的结果

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;
    }
功能周日月(开始){
var dat=新日期('1'+开始日期);
变量y=dat.getFullYear();
var m=dat.getMonth()+1;
var days=新日期(y,m,0).getDate();
var sundays=[8-(新日期(m+'/01/'+y).getDay())];
对于(变量i=周日[0]+7;i<天;i+=7){
星期天。推(i);
}
返回星期天。长度;
}
当我调用上面的函数时,比如
console.log(sundaysimonth('2013年9月')
然后返回
4
,而
2013年9月有5个星期天


我从这里得到了以上代码检查一下。我刚刚修复了你代码中的问题

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;

    }
功能周日月(开始){
var dat=新日期('1'+开始日期);
变量y=dat.getFullYear();
var m=dat.getMonth()+1;
var days=新日期(y,m,0).getDate();
var sundays=[(8-(新日期(m+'/01/'+y).getDay())%7];
对于(变量i=周日[0]+7;i<天;i+=7){
星期天。推(i);
}
返回星期天。长度;
}
在数组变量
sundays
中,我们需要初始存储第一天的值,即星期天。几个月来一直有一个小错误,第一天是星期天。例如,在您2013年9月的问题中
对于这几个月,您的代码将存储
8
,而不是
1
sundays
数组作为第一个星期日。我修复了此计算不需要循环的问题

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年所有月份的测试:

噢,马特赢了我一分钟!我提出了基本相同的解决方案,只是提出了更多的意见


在开发人员工具调试器中单步执行代码时,哪一行出现第一个错误?没有错误。它只返回不正确的结果。从一些明显的调试开始。例如,变量
days
是否用正确的数字初始化?你为什么要从任何一个月的第八天开始?天数计算为0..6。天数变量可以。没什么问题。我已经调试过了,但找不到结果错误的原因。我怀疑这就是变量
sundays
。不管怎样,+1的可能重复:)证实了这在2013年的所有月份都是正确的。
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;

}