jQuery DatePicker:当日期字段为 12-31-9999 时,currentDate 不起作用

Posted

技术标签:

【中文标题】jQuery DatePicker:当日期字段为 12-31-9999 时,currentDate 不起作用【英文标题】:jQuery DatePicker: currentDate does not work when the date field is 12-31-9999 【发布时间】:2018-08-07 23:40:06 【问题描述】:

当当前字段值为 12-31-9999 且 yearRange 为 2000:+1 时,DatePicker 无法正确处理 currentDate 的计算。当我单击该字段以打开 DatePicker 时,currentDate 的结果变为 1-1-2000。因此,DatePicker 似乎将日期包装到 yearRange 的开始。但是,如果我删除 yearRange,则 DatePicker 默认为 -10:+10 的范围,这导致年份为 9989:10009。

当我单击包含 12-31-9999 的字段时,我更希望 DatePicker 显示今天的日期。注意:逃出场地时不得更改。这可能吗?

    $(".datePicker").datepicker(
        changeMonth: true,
        changeYear: true,
        dateFormat: "yy-mm-dd",
        yearRange: 2000:+1
    );

【问题讨论】:

“包含 12-31-9999 的字段。”...确实真正的问题是为什么您的字段包含垃圾日期而不是 NULL? 12-31-9999 的日期不是垃圾日期 - 它被用作结束日期,与真正的开始日期配对。这样做的目的是搜索特定日期之间的记录,而不必在谓词中包含 ISNULL。 我明白了,我猜这是一种方法,但正如您所见,它会导致其他问题。如果没有设定结束日期,那么从数据质量的角度来看,推荐的方法是使用 NULL,大多数人会争辩说,不必将 ISNULL 放入查询中并不足以成为污染日期不的数据的充分理由真的很真实。然后,对于程序的其他部分(例如日期选择器)来说,区分什么是有意义的日期和什么只是要忽略的占位符就变得更加困难了。这是最佳做法,但最终还是见仁见智。 恕我直言,我没有发布问题来对“垃圾”日期的有效性进行诉讼。更重要的是,DatePicker 表现出不一致的行为,当日期为 12-31-9999 且 yearRange 为 2000:+1 时,它会将日期滚动到开头,但当未指定 yearRange 时,它​​会继续增加超过 9999 的年份。这是 datepicker 中的错误还是我指定了错误的 yearRange? 我提出这个问题的原因是它可以说是 XY 问题的一个例子 (xyproblem.info) - 寻找一个问题的解决方案,如果你做了其他不同的事情就不会存在首先。如果你只是有空白/空而不是这些虚假的结束日期(没有事件或时间段真的在 9999 结束,在现实生活中没有用户真正想要或要求它,让我们明确一点)那么日期选择器的问题就会消失 【参考方案1】:

您看到的问题是因为您输入字段中的日期(“9999-12-31”)超出了您指定的范围(“2000:+1”)。此范围产生 2000 年至 2019 年的日期(根据规范,年末是今天的年份加一)。

您还说过“但是,如果我删除 yearRange,则 DatePicker 默认为 -10:+10 的范围”。不完全的。它默认为“c-10:c+10”,如果您查看规范,这并不完全相同 - “c”意味着它将范围置于输入中的 10 年 +/- 年,而不是到今天。

我认为这种误解导致了你的错误。如果您希望它显示 9999 日期,请将年份范围设置为

yearRange: "2000:c+1"

这会将最大年份设置为输入年份 +1,而不是今天的年份 +1。

请参阅http://jsfiddle.net/5ornc4gv/7/ 以获取演示。

http://api.jqueryui.com/datepicker/#option-yearRange 包含格式字符串的详细信息。

正如我在 cmets 中所说,如果您的软件使用 NULL 来表示没有实际定义的结束日期的时间段的“结束日期”,这将不是一个问题。此外,您的年份范围生成的日期选择器中的年份下拉列表很难使用,并且由于其中的数据量,可能会在某些浏览器中导致一些延迟。

【讨论】:

以上是关于jQuery DatePicker:当日期字段为 12-31-9999 时,currentDate 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如果超出范围,防止 jQuery UI datepicker 更改文本字段的值

jQuery UI Datepicker 将备用字段填充并格式化为 MySQL 日期

jQuery:如何从与 datepicker 插入日期的输入字段不同的元素中激活 datepicker?

Jquery DatePicker 设置默认日期

JQuery datepicker 默认日期和多个 datepicker

JQuery Datepicker 删除已填写的日期字段