检测字符串是否为具有精确给定格式的日期

时间:2017-10-05 12:01:01

标签: javascript date parsing format

我想检查一个字符串是否代表具有给定格式的Date。 我尝试了Date.parse(string, format),但它解析了字符串的日期,即使它是一个完全不同的格式。 E.g:

Date.parse("2015-07-04T23:10:00.000+02:00", "yyyy-MM-ddTHH:mm:ss.SSSZ") // Parsed as a date
Date.parse("2000", "yyyy-MM-ddTHH:mm:ss.SSSZ") // Parsed as a date also`

我不想将第二行解析为日期,因为它不是所需的格式。 我还尝试了Date.jsDate.parseExact()方法,但如果我提供了时区和上面的格式,它就没有解析日期。

正确的解决方案基于RobG的评论:(但感谢所有人帮助我)

moment("2015-07-04T23:10:00.000+02:00", "yyyy-MM-ddTHH:mm:ss.SSSZ", true).isValid()

即使输入只是我试图避免的一年,其他所有解决方案都能成功解析。最后一个参数“true”代表“严格”解析,它提供了我正在寻找的输出。

2 个答案:

答案 0 :(得分:0)

您可以利用 MomentJS 及其功能.format()

它是如何工作的?这里是文档,它相当简单,你想将你的字符串与格式字符串结合使用。

MomentJS .format()

这是快速演示小提琴:

var myString = "2015-07-04T23:10:00.000+02:00";
var formatString = "yyyy-MM-ddTHH:mm:ss.SSSZ";
if (moment(myString, formatString)._i == myString) console.log("GOOD");

1-liner with momentJS

我基本上以目标格式格式化您的字符串,然后检查结果是否与您的字符串匹配。

值得注意的是,MomentJS是(IMHO)JS的最佳日期和时间库。自从我发现它之后,我从未找到过冒险的理由,在过去使用了一些功能较弱的库之后。

如果您不想使用lib,那么制作适合您需求的正则表达式是一种类似长度的可行替代方案。

但是,如果您打算使用很多日期/时间,MomentJS仍然是一种可行的方式,因为它提供了许多有用的东西,仅靠正则表达式无法完成。

答案 1 :(得分:0)

为什么不使用正则表达式检查输入是否与格式匹配,如果是,则解析它?

reg=new RegExp(/[0-9]{4}\-[0-9]{2}\-[0-9]{2}T[0-9]{2}\:[0-9]{2}\:[0-9]{2}\.[0-9]{3}\+[0-9]{2}\:[0-9]{2}/);
str="2015-07-04T23:10:00.000+02:00";
date=new Date(str);
if(str.match(reg) && date.toString()!='Invalid Date')
  {
    Date.parse(str);
  }

编辑添加日期检查。