ОК, давайте решим этот фрагмент за раз.
Объект Date
в JavaScript имеет метод getDay
.Возвращает 0 для воскресенья, 1 для понедельника, 2 для вторника, ... 6 для субботы.Учитывая это, мы можем заключить, что мы не хотим считать дни, чьи getDay
возвращает 0 или 6.
У вас уже есть функция для возврата количества дней в месяце, поэтому, предполагая, что мы можем выполнить циклв течение всех дней и проверьте результат getDay.daysInMonth
делает предположение, что месяц основан на нуле;поэтому 0 = январь.
Я бы посоветовал вам попробовать решить это самостоятельно отсюда;в противном случае читайте дальше.
Давайте начнем с функции isWeekday
.Нам нужны год, месяц и день:
function isWeekday(year, month, day) {
var day = new Date(year, month, day).getDay();
return day !=0 && day !=6;
}
Мы делаем точно так, как мы говорили выше: мы создаем дату и используем getDay
, чтобы определить, является ли это день.
Теперь нам нужно перебрать все дни месяца:
function getWeekdaysInMonth(month, year) {
var days = daysInMonth(month, year);
var weekdays = 0;
for(var i=0; i< days; i++) {
if (isWeekday(year, month, i+1)) weekdays++;
}
return weekdays;
}
Мы перебираем все дни месяца.Мы добавляем 1 при проверке isWeekday
, потому что день, в отличие от месяца, основан на 1.Если это так, мы увеличиваем weekdays
, затем возвращаем.
Таким образом, мы можем использовать getWeekdaysInMonth
следующим образом:
var weekdays = getWeekdayInMonth(9, 2011); //9 = October.
, что приведет к 21.