Javascript Date()构造函数不起作用

时间:2008-10-02 17:29:53

标签: javascript

我有一个问题 -

javascript Date("mm-dd-yyyy")构造函数不适用于FF。它适用于IE。

  • IE:new Date("04-02-2008") => "Wed Apr 2 00:00:00 EDT 2008"
  • FF2:new Date("04-02-2008") => Invalid Date

所以让我们试试另一个构造函数。试试这个构造函数Date("yyyy", "mm", "dd")

  • IE:new Date("2008", "04", "02"); => "Fri May 2 00:00:00 EDT 2008"
  • FF:new Date("2008", "04", "02"); => "Fri May 2 00:00:00 EDT 2008"
  • IE:new Date("2008", "03", "02"); => "Wed Apr 2 00:00:00 EDT 2008"
  • FF:new Date("2008", "03", "02"); => "Wed Apr 2 00:00:00 EDT 2008"

因此Date("yyyy", "mm", "dd")构造函数使用索引0来表示January。

有没人处理过这件事? 必须有一个比从月中减去1更好的方法。

6 个答案:

答案 0 :(得分:44)

month字段使用值0-11 definition of the Date object

我相信使用String的构造函数是依赖于系统的(更不用说依赖于区域设置/时区)了,所以你可能最好使用构造函数来指定年/月/日作为单独的参数。

BTW,在Firefox中,

new Date("04/02/2008");

对我来说很好 - 它会解释斜线,但不能解释连字符。我认为这证明了我的观点,即使用String构造Date对象是个问题。改为使用月/日/年的显式值:

new Date(2008, 3, 2);

答案 1 :(得分:18)

确实很好的伎俩,我刚刚发现了困难的方式(通过思考)。 但我使用了更自然的日期字符串连字符: - )

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

答案 2 :(得分:3)

使用

var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 

很好,但是当月和日值错误时,它会显示一些奇怪的行为。

尝试投射myDate[1]-1myDate[2]值均为55的日期.Javascript仍会返回日期,但输入显然不正确。

我希望javascript在这种情况下返回错误。

答案 3 :(得分:2)

@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)。

答案 4 :(得分:1)

你说得对,月份是指数,所以1月份是0号月份,12月份是月号11号......

- 并且没有解决方法,因为它在ECMA脚本定义中清楚地说明了,虽然简单的技巧通常会起作用:

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

答案 5 :(得分:0)

大胆的陈述。

这可能引起您的兴趣:JavaScript Pretty Date