验证字符串是否为日期

问题描述

我看过很多关于此的文章,但还没有找到我想要的东西。

我正在尝试简单地检查字符串是否是日期。该字符串可能包含一个数字,例如 2012

var timestamp = Date.parse('foo 2012');

if (isNaN(timestamp) == false) {
  var d = new Date(timestamp);
  console.log('DATE',d)
}else{
   console.log('TEXT');
}

//输出:日期:2012年1月1日,星期日,格林尼治标准时间+1100(澳大利亚东部夏令时)

  • 为什么javascript将 foo 2012 转换为明显不是日期的日期?
  • 如何验证我的字符串是实际日期?

解决方法

字符串永远不是日期。

字符串可以表示一个日期。有很多方法可以通过不同的字符串格式表示相同的日期。

这意味着“验证字符串是日期”是不可能完成的任务。您可以做的是:

  1. 验证字符串的格式是否符合某些众所周知的格式,并且其内容有效。
  2. 尝试将给定的字符串解析为预期的格式,并抛出错误或返回“ guard”值以指示解析未成功。

JavaScript采用了第三个选项,与选项2相似,只不过它返回一个值,该值指示其在处理垃圾输入方面的“最大努力”。这显然就是为什么它在您的字符串中显示了一年并决定“好吧,我想我可以为此约会了?”的原因。正如@Pointy所指出的,实际上是在规范中,如果JavaScript字符串与两种支持的格式之一都不匹配,则实现者可以决定结果是什么。

我强烈建议您在处理日期字符串时,应坚持使用一致的格式。我是ISO 8601日期/时间字符串的忠实拥护者,因为它们可以识别时区,易于排序并且受到广泛支持(包括易于由JavaScript解析)。如果您要求字符串采用标准格式,则执行查找A RegExp that can validate the input之类的事情会更容易。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...