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

Datepicker not cutting off the date properly for 2-digit year format

jQueryUI 日期选择器似乎有一个错误,它没有按要求换行世纪。我把 69 作为短年截止,似乎没有效果。相反,UI 显示低于 87 的任何年份的 1970(因此它不接受它们是有效的?)。我在那里做错了什么吗?输入的值在 1970-1986 之间时不会同步到 UI。

目标是允许用户设置 1970 年到 2069 年之间的任何日期,分别使用短符号 70 表示 1970 年和 69 表示 2069 年。

JSFiddle。 Stack Overflow 的嵌入式播放器无法正确显示日期选择器 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="" />

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

$(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="text" value="" />

TL;DR shortYearCutoff必须是整数,我把它当成字符串。在这种情况下,jQueryUI 日期选择器会默默地忽略它。必须对我的代码进行以下更改才能使其正常工作。

$(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 团队。