我想检查一个字符串是否代表具有给定格式的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.js的Date.parseExact()
方法,但如果我提供了时区和上面的格式,它就没有解析日期。
正确的解决方案基于RobG的评论:(但感谢所有人帮助我)
moment("2015-07-04T23:10:00.000+02:00", "yyyy-MM-ddTHH:mm:ss.SSSZ", true).isValid()
即使输入只是我试图避免的一年,其他所有解决方案都能成功解析。最后一个参数“true”代表“严格”解析,它提供了我正在寻找的输出。
答案 0 :(得分:0)
您可以利用 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");
我基本上以目标格式格式化您的字符串,然后检查结果是否与您的字符串匹配。
值得注意的是,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);
}
编辑添加日期检查。