【问题标题】:Datepicker not cutting off the date properly for 2-digit year formatDatepicker 没有正确切断 2 位数年份格式的日期
【发布时间】:2017-02-27 22:11:05
【问题描述】:

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

目标是允许用户设置 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="" />

【问题讨论】:

  • 使用“整页”版本的 sn-p 在此处以适当的布局运行它。

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


【解决方案1】:

在输入字段中使用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="" />

【讨论】:

  • 感谢您的回答。更改 type="text" 后我遇到了同样的问题。
  • 它对我有用。如果我输入 3/31/69,我会得到 2069 年 3 月 31 日。如果我输入 3/31/70,我会得到 1970 年 3 月 31 日。
  • 69 工作没问题。仅适用于 1970-1986 年,一切似乎都变成了 1970 年。
  • 嗯,在我看来就像一个日期选择器错误。当我更改年份时,日历会更改,因此新年的星期几是正确的,但下拉列表中的年份不会更改。然后按 Enter 后,我无法再次弹出日期选择器。
  • 你可以谷歌“bootstrap datepicker”来寻找其他人。但我敢打赌他们没有像shortYearCutoff 这样的选项,所以它实际上并不能解决这个问题。
【解决方案2】:

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 ...
},

我想正确的表达方式是检查 value 是否可以解析为 int,这样更符合 Javascript 的无类型精神。将决定权交给 jQueryUI 团队。

【讨论】:

  • 好收获。我很惊讶这是一个问题——如果它只是作为一个数字有意义,我希望它会在内部进行转换。 Javascript 通常会自己解决这个问题,但这取决于它所比较的​​对象。
猜你喜欢
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多