代码之家  ›  专栏  ›  技术社区  ›  Brad8118

javascript date()构造函数不起作用

  •  29
  • Brad8118  · 技术社区  · 16 年前

    我有个问题-

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

    • IE: new Date("04-02-2008") = & gt; "Wed Apr 2 00:00:00 EDT 2008"
    • FF2: 新日期(“04-02-2008”) = & gt; Invalid Date

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

    • IE: new Date("2008", "04", "02"); = & gt; "Fri May 2 00:00:00 EDT 2008"
    • FF: 新日期(“2008”、“04”、“02”); = & gt; “2008年5月2日星期五00:00:00”
    • IE: new Date("2008", "03", "02"); = & gt; “2008年4月2日星期三00:00:00”
    • FF: 新日期(“2008”、“03”、“02”); = & gt; “2008年4月2日星期三00:00:00”

    所以 日期(“年”、“月”、“日”) 构造函数使用的索引 0 代表一月。

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

    6 回复  |  直到 11 年前
        1
  •  44
  •   matt b    16 年前

    它是 definition of the Date object 将值0-11用于 month 字段。

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

    顺便说一句,在火狐中,

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

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

    new Date(2008, 3, 2);
    
        2
  •  18
  •   joedotnot    15 年前

    这真是个不错的把戏,我刚想出了一个很难的办法(仔细想想)。 但我用了一个更自然的日期字符串和连字符:—)

    var myDateArray = "2008-03-02".split("-");
    var theDate = new Date(myDateArray[0],myDateArray[1]-1,myDateArray[2]); 
    alert(theDate);
    
        3
  •  3
  •   Bruno Vieira    12 年前

    使用

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

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

    试着安排一个日期 myDate[1]-1 myDate[2] 值为55。尽管输入明显不正确,但javascript仍然返回日期。

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

        4
  •  2
  •   Umber Ferrule Gokhan Tank    11 年前

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

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

        5
  •  1
  •   roenving    16 年前

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

    --虽然简单的技巧通常会起作用,但在ECMA脚本定义中没有明确的说明,因此没有解决方案:

    var myDate = "2008,03,02".split(",");
    var theDate = new Date(myDate[0],myDate[1]-1,myDate[2]); 
    alert(theDate);
    
        6
  •  0
  •   cllpse    16 年前

    大胆声明。

    这可能会引起你的兴趣: JavaScript Pretty Date .