jQuery UI Datepicker使用onChangeMonthYear来更新日期

时间:2012-05-01 03:51:42

标签: jquery jquery-ui jquery-ui-datepicker

我有不少客户抱怨他们在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/

1 个答案:

答案 0 :(得分:27)

最简单的解决方案(参见demo)是使用Date对象设置新日期:

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

来自fine manual

  

<强>的setDate(日期)
  [...]
  的日期
  键入:字符串日期
  新的日期。

但是您要在altFormat中设置新日期。然后,datepicker会尽力使用yy-mm-dd格式解析DD, d MM yy日期,最终你会在1887年感到茫然和困惑,并想知道你的DeLorean在哪里。

如果他们试图从1月31日搬到2月份,您还需要决定要做什么。你可能想要去2月28日(或闰年29)。如果你从1月29日,1月30日,5月31日开始,那么类似的问题将会出现......并且向前推进一个月;如果你从6月30日开始尝试回去一个月,会出现稍微不同的问题。我将把它作为读者的练习。