【问题标题】:Javascript Date() constructor doesn't workJavascript Date() 构造函数不起作用
【发布时间】:2023-03-29 10:00:01
【问题描述】:

我有一个问题 -

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 的索引来表示一月。

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

    definition of the Date objectmonth 字段使用值 0-11。

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

    顺便说一句,在 Firefox 中,

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

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

    new Date(2008, 3, 2);
    

    【讨论】:

      【解决方案2】:

      确实是个不错的技巧,我只是通过艰难的方式发现了这一点(通过思考)。 但是我使用了一个更自然的带有连字符的日期字符串:-)

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

      【讨论】:

        【解决方案3】:

        使用

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

        没问题,但是当月份和日期值错误时,它会显示一些奇怪的行为。

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            你说的很对,月份是用索引来表示的,所以一月是第 0 个月,十二月是第 11 个月...

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

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

            【讨论】:

              【解决方案6】:

              粗体声明。

              您可能对此感兴趣:JavaScript Pretty Date

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-11-22
                • 2018-07-17
                相关资源
                最近更新 更多