JQuery UI Datepicker с использованием onChangeMonthYear для обновления даты - программирование
Подтвердить что ты не робот

JQuery UI Datepicker с использованием onChangeMonthYear для обновления даты

У меня было довольно много клиентов, жалующихся на то, что они меняют дату в JQuery Datepicker, это не обновляет дату... Это потому, что они меняют месяц/год и ожидают, что он обновит дату без выбрав один.

Итак, я подумал, что помогу им и обновить дату для них автоматически, используя функцию onChangeMonthYear().

Мой код ниже. Когда я меняю месяц или год, мне требуется 2017 или 1987... Я не понимаю, что не так. Я что-то пропустил?

$('#member_birthday_full').datepicker({ 
    altField: '#member_birthday',
    altFormat: 'yy-mm-dd',
    changeMonth: true,
    changeYear: true,
    dateFormat: 'DD, d MM yy',
    showAnim: 'slideDown',
    yearRange: '-125:+0',
    onChangeMonthYear:function(y, m, i){                                
        var d = i.selectedDay + '';                       
        if (d.length < 2) 
            d = '0' + d;                       
        var m = m + '';                       
        if (m.length < 2) 
            m = '0' + m;   
        $(this).datepicker( "setDate", y + '-' + m + '-' + d ); 
    }
});​

http://jsfiddle.net/3YQZV/

4b9b3361

Ответ 1

Самое простое решение (см. demo) - установить новую дату с помощью объекта Date:

onChangeMonthYear:function(y, m, i){                                
    var d = i.selectedDay;
    $(this).datepicker('setDate', new Date(y, m - 1, d));
}

Из точное руководство:

SETDATE (дата)
[...]
Дата
Тип: Строка или Дата
Новая дата.

Но вы устанавливаете новую дату в altFormat. Затем datepicker пытается проанализировать дату yy-mm-dd, используя формат DD, d MM yy, и вы закончите в 1887 году все ошеломленные и смущенные и задаетесь вопросом, где находится ваш DeLorean.

Вы также захотите решить, что вы собираетесь делать, если они попытаются перейти, например, с 31 января по февраль. Вероятно, вы захотите отправиться на 28 февраля (или 29 в високосный год). Аналогичные проблемы возникнут, если вы начнете с 29 января, 30 января, 31 мая... и выйдете на один месяц; возникают несколько разных проблем, если вы начнете 30 июня и попытаетесь вернуться на один месяц. Я оставлю это как упражнение для читателя.