如何在jQuery UI的datepicker的beforeShow方法中获取规范化的最小/最大值?

时间:2015-07-18 14:17:49

标签: javascript jquery jquery-ui datepicker

我有一对datepicker对象,我想作为一个范围,所以在"低"中设置一个值。一个调整minDate(和yearRange)在另一个中,类似于" maxDate"在另一个。问题是我得到的类型似乎可以是日期或字符串或数字或???所以我无法使用它来设置其他值。以下代码段:

$(document).ready(function() {
$( '#from' ).datepicker({          /* the "low" datepicker */
    showOn:         'button',
    changeMonth:        true,
    changeYear:     true,
    defaultDate:        null,
    minDate:        new Date(2009,0,1),
    maxDate:        null,
    buttonImageOnly:    true,
    buttonImage:        '/img/calendar_icon_20x20.png',
    buttonText:     'select date from calendar',
    dateFormat:     'dd-M-yy',
    beforeShow:
        function ( inp, inst ) {
            var v;
            var o = {};
            var miny = new Date(inst.settings.minDate).getFullYear();
            var maxy = new Date(inst.settings.maxDate).getFullYear();

            v = $( '#thru' ).val();  /* the "high" datepicker */
            if (v == '') {
                v = $( '#thru' ).datepicker('option', 'maxDate');
            }
            if (typeof v == 'object') {
                o.maxDate = v;
            } else {
                o.maxDate = $.datepicker.parseDate('dd-M-yy', v.trim());
            }
            maxy = o.maxDate.getFullYear();
            o.yearRange = miny + ':' + maxy;
            return o;
        }
    });
});

我认为我需要添加一个if (typeof v == 'number') {..}部分并尝试从数字天数偏移计算一个日期,然后我仍然要担心如果我得到一个字符串,它不与dateFormat匹配,因此解析将失败。我假设datepicker代码中有一些东西已经不得不这样做默认/ min / maxDate的输入规范化(可能是一个Date对象)并没有某种方式让我访问已经规范化的值(而不是像我迄今为止那样严重地重新发明轮子?)

1 个答案:

答案 0 :(得分:0)

好吧,我抓住了未经缩小的jquery-ui来源,并通过它进行了搜索,尽可能地告诉它似乎将规范化的日期保留在任何地方,它重新计算他们每次需要它们。似乎有一个"私人"函数_determineDate,你可以访问它来进行规范化,但这显然不是非常适合未来的。无论如何,为了完整性,这里是:

var rawvalue = $( '#other' ).datepicker('option', 'minDate');
var asDate = $.datepicker._determineDate(inst, rawvalue, null);