Как найти рабочие дни в текущем месяце с помощью Javascript? - PullRequest
0 голосов
/ 20 октября 2011

Как мне создать функцию для нахождения номеров рабочих дней текущего месяца? Можете ли вы код в простой JavaScript без Jquery.

    function daysInMonth(iMonth, iYear)
    {
    return 32 - new Date(iYear, iMonth, 32).getDate();
    }

    function Detail() {
    var d = new Date();
    var year = d.getFullYear();
    var month = d.getMonth();
    var dim = daysInMonth(month, year);
    alert(dim);
    }
    function Businessday(iMonth, iYear)
    {
   //   enter code here
    } 
    function isBusinessDay(){
    var d=new Date();
    var day = d.getDay();
    switch(day) {
        case 0:
            document.write("Today is Weekend");
        break;
        case 6:
        document.write("Today is Weekend");
            break;
            default:
            document.write("Today is business day");
        }
           }

Спасибо заранее.

Ответы [ 2 ]

15 голосов
/ 20 октября 2011

ОК, давайте решим этот фрагмент за раз.

Объект 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.

2 голосов
/ 30 мая 2017

Стиль функции стрелки с цепочкой:

(
    (year, month) => 
        new Array(32 - new Date(year, month, 32).getDate())
        .fill(1)
        .filter(
            (id, index) =>
                [0, 6].indexOf(
                    new Date(year, month, index + 1).getDay()) === -1
                ).length
)(2017, 5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...