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

IT技术 javascript
2021-02-17 01:05:58

我有一个问题——

javascriptDate("mm-dd-yyyy")构造函数不适用于 FF。它适用于 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")

  • 浏览器: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"
  • 浏览器: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来表示一月。

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

6个回答

Date 对象定义是month字段使用值 0-11

我相信使用 String 的构造函数是依赖于系统的(更不用说依赖于语言环境/时区),所以你最好使用将年/月/日指定为单独参数的构造函数。

顺便说一句,在 Firefox 中,

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

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

new Date(2008, 3, 2);

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

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

使用

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

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

尝试投射一个日期,其中myDate[1]-1和 的myDate[2]值都为 55。Javascript 仍然返回一个日期,尽管输入显然不正确。

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

@弗兰克:你是对的。当您需要验证日期时,

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)}

日期对象需要额外的天数 (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)。

你说得对,月份被表示为一个索引,所以一月是月份编号 0,十二月份是月份编号 11 ...

-- 并且没有解决方法,因为它在 ECMA-script-definition 中明确说明,尽管简单的技巧通常会起作用:

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