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

jQuery DatePicker:currentDate在日期字段为12-31-9999时不起作用,jquery,asp.net,asp.net-mvc,datepicker,Jquery,Asp.net,Asp.net Mvc,Datepicker,当当前字段值为12-31-9999且年份范围为2000:+1时,日期选择器无法正确处理当前日期的计算。当我点击字段打开DatePicker时,currentDate的结果变成1-1-2000。因此,似乎DatePicker将日期环绕到yearRange的开始。但是,如果我删除yearRange,那么DatePicker默认为-10:+10的范围,这将导致年份为9989:10009 当我单击包含12-31-9999的字段时,我更希望DatePicker显示今天的日期。注意:退出该字段时不应进行任何

当当前字段值为12-31-9999且年份范围为2000:+1时,日期选择器无法正确处理当前日期的计算。当我点击字段打开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
    });

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

您还说“但是,如果我删除了yearRange,那么DatePicker的默认范围是-10:+10”。不完全是。它默认为“c-10:c+10”,如果您查看规范,这不是完全相同的事情,“c”表示它将输入的范围设置为10年+/-一年,而不是今天的一年

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

yearRange: "2000:c+1"
这将最大年份设置为输入年份+1,而不是今天的年份+1

请参见演示

包含格式字符串的详细信息


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

“包含12-31-9999的字段。”…当然,真正的问题是为什么字段中包含垃圾日期而不是空日期?9999年12月31日不是垃圾日期-它被用作结束日期,与实际开始日期配对。这样做的目的是搜索特定日期之间的记录,而不必在谓词中包含ISNULL。我知道,这是一种方法,我猜,但正如您所看到的,它会导致其他问题。如果没有设置结束日期,那么从数据质量的角度来看,推荐的方法是使用NULL,大多数人会认为不必在查询中输入ISNULL并不是用不真实的日期污染数据的充分理由。这样,程序的其他部分(如日期选择器)就很难区分什么是有意义的日期,什么只是要忽略的占位符。这是最好的做法,但最终还是一个意见问题。恕我直言,我并没有就“垃圾”日期的有效性提出诉讼。更重要的是,DatePicker表现出不一致的行为,即当日期为12-31-9999且年份范围为2000:+1时,它将日期滚动到起始日期,而当未指定年份范围时,它将在9999年之后继续递增年份。这是datepicker中的一个bug,还是我指定了一个糟糕的年份范围?我提出这个问题的原因是,它可以说是一个X-Y问题的例子()-寻找一个解决问题的方法,如果你一开始做了其他不同的事情,这个问题就不存在了。如果你只是用空/空来代替这些虚假的结束日期(没有任何事件或时间段真正在9999年结束,现实生活中没有用户真正想要或要求这样做,让我们澄清一下),那么日期选择器的问题就会消失