Включить первое воскресенье в Jquery UI datapicker - PullRequest
1 голос
/ 09 июля 2011

В настоящее время я работаю над средством выбора даты Jquery, где праздничные дни отключены и все воскресенья, кроме первого в каждом месяце.Я пытался немного поиграться с кодом и узнал, как отключить все воскресенья и праздники, но не могу понять, как включить первое воскресенье каждого месяца.

В настоящее время мой код выглядитэто:

<script type="text/javascript">
        (function(){

            var natDays = [[12, 24],[12, 25], [1,1], [12, 31]];
            var daysToDisable = [0];
            function nationalDays(date) {
                for (i = 0; i < natDays.length; i++) {
                    if (date.getMonth() == natDays[i][0] - 1
                    && date.getDate() == natDays[i][1]) {
                        return [false, natDays[i][2] + '_day'];
                    }
                }
                for (i = 0; i < daysToDisable.length; i++) {
                    if ($.inArray(day, daysToDisable) != -1) {
                        return [false];
                    }
                }
                return [true];
            }   
            // Datepicker
            $('#datepicker').datepicker({
                inline: true,
                firstDay: 1,
                changeYear: true,
                changeMonth: true,
                beforeShowDay: nationalDays,
            });
        });
</script>

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Логически, первое воскресенье месяца всегда в или до седьмого и второго (и последующих) воскресений после 7-го.

function nationalDays(date) {
    for (i = 0; i < natDays.length; i++) {
        if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) {
            return [false, natDays[i][2] + '_day'];
        }
    }
    if (date.getDate() > 7 && $.inArray(date.getDay(), daysToDisable) != -1)
        return [false];
    }
    return [true];
}

Я бы также предложил изменить структуру массива natDays на плоский массив, чтобы ускорить поиск. Для ваших префиксов классов (которые не установлены в вашем примере) вы можете использовать дополнительный массив с соответствующими индексами. Ваша последняя функция будет выглядеть так:

var natDays = ["12-24", "12-25", "1-1", "12-31"];
var classPrefixes = ["", "", "", ""];
var daysToDisable = [0];

function nationalDays(date) {
    var index = $.inArray((date.getMonth() + 1) + "-" + date.getDate(), natDays);
    if (index != -1) {
        return [false, classPrefixes[index] + '_day'];
    }
    if (date.getDate() > 7 && $.inArray(date.getDay(), daysToDisable) != -1)
        return [false];
    }
    return [true];
}
0 голосов
/ 09 июля 2011

Метод, который вы ищете, это date.getDay (), который возвращает число от 0 до 6, где 0 - воскресенье.

function nationalDays(date) {
    if(date.getDay() == 0) {
        // do stuff...
...