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

Javascript JS中解析数据的奇怪行为,javascript,parsing,date,datejs,Javascript,Parsing,Date,Datejs,我正在使用library和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本身也有问题…我猜Date.js足够聪明,可以意识到30不是有效月份

我正在使用library和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本身也有问题…

我猜Date.js足够聪明,可以意识到
30
不是有效月份,所以它会将自己切换为dd/mm/yyyy格式

但是,默认格式为mm/dd/yyyy,并且它确实将
01
识别为有效月份(1月),因此它给出的是1月8日,而不是8月1日

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

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

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


当您使用30表示月份时,库将其解析为一天,但在下一种情况下,没有任何借口,您将被解析为一个月而不是一天。

感谢所有提示

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

7月30日后两天的7月1日怎么样?那应该是
Date.parse('01/08/2012')
?Firefox告诉我,“30/07/2012”实际上是2014年6月7日,它将第一个字段解释为月份,因此它给我2012年的第30个月。这可能是语言环境问题。@Pointy我相信他指的是
Date.js
库的
Date.parse
方法?无论浏览器是什么,它都应该给出相同的结果。您可以使用此处的文本框进行测试:@Esailija是的,这就是我试图确定的-这肯定是库所做的事情(对我来说,这似乎是严重不受欢迎的行为)是的,这肯定是Date.js正在做的事情-此场景可以在Date.js的演示主页上复制。我不确定我会称之为“聪明”但是:-)@Pointy同意了。聪明是一回事,但这对我来说太神奇了。