【问题标题】:Javascript new Date() accepts dates beyond end of month [duplicate]Javascript new Date() 接受月末之后的日期[重复]
【发布时间】:2015-11-10 14:43:06
【问题描述】:

我正在使用 JavaScipt 的 new Date(datestring) 来解析 IE11 上的用户输入。

具体的代码行是

var date = new Date(enteredText);

它接受日期字段的任何参数 - 例如,5/50/1997 解析为 June 19, 1997,因为 6 月 19 日将是 5 月的第 50 天。

有没有办法强制它不这样做并且只接受真实的日期?

【问题讨论】:

  • 您可以在创建日期对象之前检查该值。但是我在 chrome 中尝试了它,但我无法创建一个大于 30/31 的日期。它返回“无效日期”
  • 您需要自己解析日期。如果您将无效的日期字符串传递给日期构造函数,browsers are free to interpret as they please:“如果字符串不符合该格式,则函数可能会退回到任何特定于实现的启发式或特定于实现的日期格式。”我>
  • 不同的浏览器对日期函数的处理方式不同。有些返回日期有些返回无效日期。
  • Date 对象在 JavaScript 中根本被破坏,如果您需要在前端处理日期,我建议使用 momentjs,额外的字节将为您节省大量时间和头痛跨度>

标签: javascript date


【解决方案1】:

您必须自己解析字符串以验证日期是否有效。为此,您需要将字符串拆分为 delimiter(在本例中为“/”)并检查每一天/月/年是否有效。

将此验证放在哪里完全取决于您。您可以使用Date.prototype.constructor = function(){/*your code here*/} 覆盖Date 构造函数,或者您可以创建一个自定义函数,在实例化新日期function validateDate(str){/*your code here*/} 之前验证字符串。后者可能是你最好的选择。

【讨论】:

  • 嗯。在调用内置日期解析例程之前编写一个日期解析例程似乎有点不合理。啊,JavaScript...
【解决方案2】:

您可以拆分'/'传递的参数或根据您的分隔符是,并在将其传递给日期函数之前手动检查日期、月份和年份是否有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-29
    • 2023-03-19
    • 2014-01-08
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2012-11-15
    相关资源
    最近更新 更多