如何在 jQuery UI 的日期选择器的 beforeShow 方法中获取规范化的 min/max 值?

How do I to get the canonicalized min/max values in jQuery UI's datepicker's beforeShow method?

我有一对日期选择器对象,我想将其用作范围,因此在 "low" 中设置一个值会调整另一个中的 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 代码中有一些东西已经必须对 default/min/maxDate 的输入进行规范化(大概是一个 Date 对象)是不是有一些方法可以让我访问已经规范化的值(而不是像我迄今为止所做的那样糟糕地重新发明轮子)?

好吧,我抓住了未缩小的 jquery-ui 来源并搜索了它并且尽可能接近它 没有 似乎将规范化日期保留在任何地方,它会在每次需要时重新计算它们。似乎有一个 "private" 函数,_determineDate,您可以访问它来进行规范化,但这显然不是很适合未来。无论如何为了完整性,这里是:

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