Datepicker没有正确切断2位年份格式的日期

时间:2017-02-27 22:11:05

标签: jquery jquery-ui datepicker jquery-ui-datepicker date-format

jQueryUI datepicker似乎有一个错误,并没有按要求包装世纪。我把69作为短年截止,似乎没有效果。相反,UI显示1970年低于87的任何一年(所以它不接受它们是有效的?)。我在那里做错了吗?当类型值在1970-1986之间时,它们不会同步到UI。

enter image description here

目标是允许用户设置1970年至2069年之间的任何日期,其中70的缩写表示1970年,69表示分别为2069年。

JSFiddle。 Stack Overflow的嵌入式播放器无法正确显示datepicker的UI,它会隐藏输入字段 - 请使用jsfiddle。

$(document).ready(function() {
  $('#myDate').datepicker({
    changeMonth: true,
    changeYear: true,
    dateFormat: 'm/d/y',
    shortYearCutoff: '69',
    yearRange: '1970:2069'
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/>

<input id="myDate" name="myDate" type="date" value="" />

2 个答案:

答案 0 :(得分:1)

在输入字段中使用type="text"而不是type="date"。当您使用type="date"时,浏览器会控制原始输入字段的格式,这会覆盖日期选择器的dateFormat选项;它没有

&#13;
&#13;
$(document).ready(function() {
  $('#myDate').datepicker({
    changeMonth: true,
    changeYear: true,
    dateFormat: 'm/d/y',
    shortYearCutoff: '69',
    yearRange: '1970:2069'
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" rel="stylesheet"/>

<input id="myDate" name="myDate" type="text" value="" />
&#13;
&#13;
&#13;

答案 1 :(得分:1)

TL; DR shortYearCutoff必须是整数,我把它作为字符串。在这种情况下,jQueryUI datepicker默默地忽略它。我的代码需要进行以下更改才能使其正常工作。

$(document).ready(function() {
  $('#myDate').datepicker({
    changeMonth: true,
    changeYear: true,
    dateFormat: 'm/d/y',
    shortYearCutoff: 69, //integer is important, string will get ignored
    yearRange: '1970:2069'
  });
});

Fixed JSFiddle

以下是 jQueryUI.js 中的相关代码块。

_getFormatConfig: function( inst ) {
    //...
    shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff :
        new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );        
    //return ...
},

我想正确的方法是检查值是否可以解析为int,然后它将更符合Javascript的无类型精神。离开jQueryUI团队的决定。