在JS中解析数据的奇怪行为

时间:2012-07-30 13:08:57

标签: javascript parsing date datejs

我正在使用库Date.js和Date.parse()方法

当我解析Date.parse('30 / 07/2012')时,我正确的日期是2012年7月30日星期一00:00:00 GMT + 0200(CEST) 但是当我试图解析Date.parse('01 / 08/2012')(日期2天后)我将于2012年1月8日星期一00:00:00 GMT + 0100(CET) 它正在切换日期和月份!

有人知道为什么会这样吗?

我相信这不是问题,不是在Date.js中,而是在JS本身......

3 个答案:

答案 0 :(得分:3)

我的猜测是date.js足够聪明,意识到30不是一个有效的月份,因此它将自己切换为dd / mm / yyyy格式。

默认格式为mm / dd / yyyy,并且它会将01识别为有效月份(1月),因此它会为您提供1月8日而不是8月1日。

要解决此问题,只需指定您正在使用的格式字符串:

Date.parse('30/07/2012', 'MM/dd/yyyy');

http://code.google.com/p/datejs/wiki/APIDocumentation

答案 1 :(得分:0)

您的格式可能不对(“mm / dd / yyyy”)而不是(“dd / mm / yyyy”)。

当你使用30个月时,图书馆将其解析为一天,但在下一个案例中,没有任何借口,你将被解析为一个月而不是一天。

答案 2 :(得分:0)

感谢大家的提示。

实际解决方案是使用 Date.parseExact()并指定日期输入。 在这种情况下,它是Date.parseExact('01/08/2012', "d/M/yyyy")