jQuery UI datepicker:计算从今天起的minDate x年

时间:2019-03-20 17:01:06

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

下午好

我正在尝试为jQuery UI datepicker设置minDate,它对于所有12至17岁的用户都应该有效。仅使用maxDate可以正常工作。而且我知道我必须以某种方式计算minDate。我已经搜索了所有其他StackOverflow线程,但是无法找到类似的东西。我找到的其他解决方案设定了一个固定日期,但是与今天相比,我需要12-17年。

到目前为止,我已经尝试过:

minDate: new Date((currentYear - 12), currentMonth, currentDay))

minDate: "-12y"

我当前的样本:

$(".datepicker").datepicker({
    numberOfMonths: 1,
    firstDay: 1,
    defaultDate: 0,
    changeMonth: true,
    changeYear: true,
    yearRange: '1910:c',
    dateFormat: 'dd.mm.yy',
    beforeShow: function () {
        var currentYear = (new Date).getFullYear();
        var currentMonth = (new Date).getMonth() + 1;
        var currentDay = (new Date).getDate();
        
        $(this).datepicker({ 
            minDate: new Date((currentYear - 12), currentMonth, currentDay),
            maxDate: "-17y -11m -30d"
        });
    }
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet"/>

<input type="text" class="datepicker" id="myDate">

1 个答案:

答案 0 :(得分:2)

minDate: "-12y"绝对可以,但是如果您只允许12至17岁之间的年龄,则需要同时使用minDatemaxDate来设置允许的范围。

由于这个原因,您onBeforeShow()numberOfMonthsdefaultDateyearRange的使用是多余的。试试这个:

$(".datepicker").datepicker({
  firstDay: 1,
  changeMonth: true,
  changeYear: true,
  dateFormat: 'dd.mm.yy',
  minDate: '-17y', // min 17 years ago
  maxDate: '-12y', // max 12 years ago
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" />

<input type="text" class="datepicker" id="myDate">