Javascript Date()构造函数没有';行不通

Javascript Date()构造函数没有';行不通,javascript,Javascript,我有个问题- javascript日期(“mm dd yyyy”)构造函数不适用于FF。它对IE很管用 IE:新日期(“04-02-2008”)=>“Wed Apr 2 00:00:00 EDT 2008” FF2:新日期(“04-02-2008”)=>无效日期 因此,让我们尝试另一个构造函数。尝试此构造函数日期(“yyyy”、“mm”、“dd”) IE:新日期(“2008”、“04”、“02”)=>“2008年5月2日星期五00:00:00美国东部夏令时” FF:新日期(“2008”、“

我有个问题-

javascript
日期(“mm dd yyyy”)
构造函数不适用于FF。它对IE很管用

  • IE:
    新日期(“04-02-2008”)
    =>
    “Wed Apr 2 00:00:00 EDT 2008”
  • FF2:
    新日期(“04-02-2008”)
    =>
    无效日期
因此,让我们尝试另一个构造函数。尝试此构造函数
日期(“yyyy”、“mm”、“dd”)

  • IE:
    新日期(“2008”、“04”、“02”)=>“2008年5月2日星期五00:00:00美国东部夏令时”
  • FF:
    新日期(“2008”、“04”、“02”)=>“2008年5月2日星期五00:00:00美国东部夏令时”
  • IE:
    新日期(“2008”、“03”、“02”)=>“美国东部夏令时2008年4月2日星期三00:00:00”
  • FF:
    新日期(“2008”、“03”、“02”)=>“美国东部夏令时2008年4月2日星期三00:00:00”
因此
日期(“yyyy”、“mm”、“dd”)
构造函数使用
0
索引来表示一月

有人处理过这个问题吗?
一定有比从月份中减去1更好的方法。

最好在
月份
字段中使用值0-11

我认为使用字符串的构造函数依赖于系统(更不用说依赖于区域设置/时区),因此最好使用构造函数,将年/月/日指定为单独的参数

顺便说一句,在Firefox中

new Date("04/02/2008");
对我来说很好-它可以解释斜杠,但不能解释连字符。我认为这证明了我的观点,即使用字符串构造日期对象是有问题的。改为使用月/日/年的显式值:

new Date(2008, 3, 2);
大胆的声明


这可能会引起你的兴趣:。

你说得很对,月份是以指数表示的,所以一月是第0个月,十二月是第11个月

--ECMA脚本定义中明确指出,虽然简单的技巧通常会奏效,但没有解决办法:

var myDate = "2008,03,02".split(",");
var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 
alert(theDate);

这确实是一个很好的把戏,我刚刚发现了困难的方法(通过思考)。 但我使用了一个更自然的日期字符串和连字符:-)

使用

可以,但当月和日值错误时,它会显示一些奇怪的行为

尝试在
myDate[1]-1
myDate[2]
的值都为55的情况下强制转换日期。Javascript仍然返回日期,尽管输入显然不正确


在这种情况下,我宁愿javascript返回错误。

@Frank:你说得对。当您需要验证日期时

var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 
这是行不通的

发生的事情是,它不断地添加额外的参数。例如:

new Date("2012", "11", "57") // Date {Sat Jan 26 2013 00:00:00 GMT+0530 (IST)}
Date对象接受额外的天数(57-31=26)并将其添加到我们创建的日期

或者,如果我们尝试使用以下内容构造日期对象:

new Date("2012", "11", "57", "57") //Date {Mon Jan 28 2013 09:00:00 GMT+0530 (IST)}
额外增加2天9小时(57=24+24+9)

new Date("2012", "11", "57") // Date {Sat Jan 26 2013 00:00:00 GMT+0530 (IST)}
new Date("2012", "11", "57", "57") //Date {Mon Jan 28 2013 09:00:00 GMT+0530 (IST)}