【问题标题】:JavaScript validate existence of dateJavaScript 验证日期的存在
【发布时间】:2010-10-29 15:18:24
【问题描述】:

我有一个格式为 YYMMDD 的日期。无论如何我可以在 JavaScript 中验证它吗? 我所说的验证不是指更简单的东西,比如长度、字符等,而是指日期是否存在于现实生活中。

我希望有一种更快/更好的方法,而不是将其分成 3 个 2 个字符的块并单独检查。

谢谢。

【问题讨论】:

标签: javascript validation date


【解决方案1】:

尝试将其转换为日期,如果失败,您会得到可怕的NaN,那么您知道它不是有效的日期字符串吗?不漂亮,但它应该可以工作

var myDate = new Date(dateString);
// should write out NaN
document.write("Date : " + myDate);

You date string would have to be in a valid format for javascript 我认为您的问题YYMMDD 不支持

【讨论】:

  • 这是个好主意,比验证每个块都要好。我可以获取丢失的 YY 以使其成为 YYYYMMDD 格式。我会试一试,让你知道。谢谢。
【解决方案2】:

Javascript Date.parse 不支持格式 YYMMDD,因此您必须对其进行一些处理,例如将其分解。

我建议构建一个函数,将其拆分为 3 2 个字符字符串,然后构建一个美式日期

MM/DD/YY 并尝试使用 Date.parse 解析。

如果它返回除 NaN 以外的任何内容,则它是有效日期。

【讨论】:

    【解决方案3】:

    JavaScript 中的Date 解析器非常无用。它接受的实际格式因浏览器而异。 ECMAScript 标准保证工作的唯一格式是实现的toStringtoUTCString 方法产生的任何格式。在 ECMAScript 第五版中,您还将获得 ISO-8166 格式,它更接近您的格式,但仍不完全。

    所以,最好的解决方案通常是自己解析。

    var y= parseInt(s.slice(0, 2), 10)+2000;
    var m= parseInt(s.slice(2, 4), 10)-1;
    var d= parseInt(s.slice(4, 6), 10);
    var date= new Date(Date.UTC(y, m, d));
    

    现在您已经有了一个Date 对象,它以UTC 表示输入日期。但这还不够,因为Date 构造函数允许虚假月份(如 13 个月或 40 天)环绕。因此,要检查给定的日期是真实的一天,请转换回年/月/日并进行比较:

    var valid= date.getUTCFullYear()===y && d.getUTCMonth()===m && d.getUTCDate()===d;
    

    【讨论】:

      猜你喜欢
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多