我有一个问题 -
javascript Date("mm-dd-yyyy")
构造函数不适用于FF。它适用于IE。
new Date("04-02-2008")
=> "Wed Apr 2 00:00:00 EDT 2008"
new Date("04-02-2008")
=> Invalid Date
所以让我们试试另一个构造函数。试试这个构造函数Date("yyyy", "mm", "dd")
new Date("2008", "04", "02");
=> "Fri May 2 00:00:00 EDT 2008"
new Date("2008", "04", "02");
=> "Fri May 2 00:00:00 EDT 2008"
new Date("2008", "03", "02");
=> "Wed Apr 2 00:00:00 EDT 2008"
new Date("2008", "03", "02");
=> "Wed Apr 2 00:00:00 EDT 2008"
因此Date("yyyy", "mm", "dd")
构造函数使用索引0
来表示January。
有没人处理过这件事? 必须有一个比从月中减去1更好的方法。
答案 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]-1
和myDate[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。