日期选择器在每月9号之后不启用日期

datepicker not enabling date after 9th of month

本文关键字:日期 之后 不启用 9号 选择器      更新时间:2023-09-26

我试图为用户创建一些特定的日期,为此我在范围内指定了一些日期。一切看起来都很好,除了日期选择器没有选择超过9号的日期。

我找不到错误,如果有人能帮忙,那将是很大的帮助。

JsFiddle URL: http://jsfiddle.net/8AXaw/1/

<script type='text/javascript'>
    var availableDates = "2014-07-04, 2014-07-05, 2014-07-06, 2014-07-07, 2014-07-08, 2014-07-09, 2014-07-10, 2014-07-11, 2014-07-12, 2014-07-13, 2014-07-14, 2014-07-15, 2014-07-16, 2014-07-17, 2014-07-18, 2014-07-19, 2014-07-20, 2014-07-21, 2014-07-22, 2014-07-23, 2014-07-24, 2014-07-25, 2014-07-26, 2014-07-27, 2014-07-28, 2014-07-29, 2014-07-30, 2014-07-31, 2014-08-01, 2014-08-02, 2014-08-03, 2014-08-04, 2014-08-05";
    var availableDate = availableDates.split(', ');
    function available(date) {
       dmy = date.getFullYear() + '-0' + (date.getMonth()+1) + '-0' +date.getDate();
       if (jQuery.inArray(dmy, availableDate) != -1) {
          return [true, '','Available'];
       } else {
         return [false,'','unAvailable'];
       }
    }
    jQuery('#datepicker').datepicker({ beforeShowDay: available });
</script>

JsFiddle URL: http://jsfiddle.net/8AXaw/1/

这是你构造日期的方式

var dmy = date.getFullYear() + '-0' + (date.getMonth()+1) + '-0' +date.getDate();

注意这个0,你最后得到的日期是

2014-07-08
2014-07-09
2014-07-010
2014-07-011
2014-07-012

很明显,为什么它只适用于09,因为010是无效的,你对月份也是这样做的。

您可以添加一个函数,在必要时填充数字,而不是

function available(date) {
    var dmy = date.getFullYear() + '-' + pad(date.getMonth() + 1) + '-' + pad(date.getDate());
    if (jQuery.inArray(dmy, availableDate) != -1) {
        return [true, '', 'Available'];
    } else {
        return [false, '', 'unAvailable'];
    }
}
function pad(n) {
    return n < 10 ? ('0' + n) : n;
}

小提琴