作为此副本的副本而被关闭,因此我认为在此处添加一些新信息很重要。我之所以写它,是因为我害怕人们会真正复制并粘贴此处发布的一些代码并在生产中使用它。
此处的大多数答案都使用一些仅匹配某些非常特定格式的复杂正则表达式,而实际上却做得不正确(例如匹配1月32日,而未匹配所宣传的实际ISO日期-请参见demo),或者他们尝试将任何内容传递给Date构造函数并希望最好。
使用时刻
正如我在此答案中解释的,当前有一个可用的库: Moment.js
它是一个用于解析,验证, *** 作和显示Javascript中的日期的库,它具有比标准Javascript日期处理功能丰富得多的API。
它缩小/压缩了12kB,可在Node.js和其他地方使用:
bower install moment --save # bowernpm install moment --save # npmInstall-Package Moment.js # NuGetspm install moment --save # spmmeteor add momentjs:moment # meteor
使用Moment,您可以非常明确地检查有效日期。有时,添加一些有关所需格式的线索非常重要。例如,除非您使用DD / MM / YYYY格式,否则日期(例如06/22/2015)看起来像是有效日期,在这种情况下,该日期应被视为无效。有几种方法可以告诉Moment您期望什么格式,例如:
moment("06/22/2015", "MM/DD/YYYY", true).isValid(); // truemoment("06/22/2015", "DD/MM/YYYY", true).isValid(); // false
该true参数存在,因此,如果矩不完全符合所提供的一种格式,则Moment不会尝试解析输入(我认为这应为默认行为)。
您可以使用内部提供的格式:
moment("2015-06-22T13:17:21+0000", moment.ISO_8601, true).isValid(); // true
您可以使用多种格式作为数组:
var formats = [ moment.ISO_8601, "MM/DD/YYYY :) HH*mm*ss"];moment("2015-06-22T13:17:21+0000", formats, true).isValid(); // truemoment("06/22/2015 :) 13*17*21", formats, true).isValid(); // truemoment("06/22/2015 :( 13*17*21", formats, true).isValid(); // false
其他图书馆
如果您不想使用Moment.js,那么还有其他库:
XDate
日期JS
2016更新
我创建了类似于 Moment(子集)的immoment模块,但没有因现有对象的突变而引起的意外(有关更多信息,请参阅文档)。
2018更新
今天,我建议使用Luxon代替Moment 来进行日期/时间 *** 作(与Moment不同),Moment使所有对象不可变,因此不会出现与隐式更改日期有关的令人讨厌的惊喜。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)