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;
}