2017-03-02 163 views
1

我想解析JavaScript中的日期,但特定的格式给我适合。我从我的信用卡公司导出了数据,日期字段的格式与Date.parsemoment().isValid()不兼容。解析日期“2016年1月1日星期五”

E.g.

Date.parse("01/01/2016 Fri") // NaN 
moment("01/01/2016 Fri") // false 

我不知道我是否应该做些什么用正则表达式.test().matches()因为这是被用于CSV导入实用程序,后者的日期可能是在不同的格式。我很惊讶上面的效用函数不起作用。

+0

如果一周中的某一天不重要,您可以修剪'Fri'来留下有效的日期字符串。星期几可以重新计算或“拆分”,以便它仍然可以访问。 – Jake

+0

有多少种日期格式?你能列出问题中的所有格式吗? –

回答

0

in the Moment docs看看如何解析任何格式的日期。第一个参数是日期字符串,第二个参数是格式字符串。字母数字字符被忽略,所以你不必担心斜杠与破折号。

moment("01/01/2016 Fri", "MM-DD-YYYY ddd)

+1

“Alpha * numeric *”表示数字也 – pinkfloydx33

+0

@ pinkfloydx33是正确的,文档实际上说非字母数字字符被忽略。 'ddd'应该让你解析每周的一天作为输入的一部分。 – Cass

0

退房的Mozilla MDN on Date.parse()

解析()方法接受一个日期字符串(如 “1995年12月25日”)和毫秒的 回报的人数自1月1日, 1970,00:00:00 UTC。此功能对于根据字符串 值(例如,结合setTime()方法和Date对象设置日期值很有用。

给定一个表示时间的字符串,parse()返回时间值。它 接受RFC2822/IETF日期语法(RFC2822第3.3节),例如 “星期一,1995年12月25日13:30:00 GMT”。它了解大陆US 时区的缩写,但是对于一般用途,使用时区偏移量,例如,“星期一,1995年12月25日13:30:00 +0430”(格林威治以东4小时30分 ),例如 子午线)。

由此看来,它看起来像你的问题是你给的日期的格式不正确:

它 接受RFC2822/IETF日期语法(RFC2822 3.3节),例如 “星期一,1995年12月25日13:30:00 GMT”。

检查了这一点:根据所提供的浏览器和值,例如在日期字符串

无效的值不被识别为ISO格式由ECMA-262所定义的可能或可能不导致NaN时,:

// Non-ISO string with invalid date values 
new Date('23/25/2014'); 

TL; DR - 你传递的价值观中无法识别的格式,这就是为什么它返回NaN的。

尝试此来源的日期为正则表达式:Regexlib.com。该网站有点过时,但信息很好。它具有用于不同日期格式的大量不同的Regexes。

+0

您似乎没有引用最重要的部分:“***不推荐使用Date.parse ... ***”。 – RobG

+0

@RobG谢谢!我会解决它。 –

相关问题