一个月内的星期日总数

时间:2014-01-29 22:03:41

标签: 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 = [ 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

获得了代码

3 个答案:

答案 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数组作为第一个星期日。我修好了