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'
});
});
这里是jQueryUI.js.
中的相关代码块
_getFormatConfig: function( inst ) {
//...
shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff :
new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );
//return ...
},
我想正确的表达方式是检查值是否可以解析为 int,这样更符合 Javascript 的无类型精神。将决定权留给 jQueryUI 团队。
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'
});
});
这里是jQueryUI.js.
中的相关代码块_getFormatConfig: function( inst ) {
//...
shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff :
new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );
//return ...
},
我想正确的表达方式是检查值是否可以解析为 int,这样更符合 Javascript 的无类型精神。将决定权留给 jQueryUI 团队。