有效的Javascript日期对象需要什么?

有效的Javascript日期对象需要什么?,javascript,html,date,Javascript,Html,Date,我一整天都在为这件事生气。无论我如何初始化Javascript日期,我似乎都无法获得有效的日期对象。。。通过使用Chrome的调试器检查日期,我假设该日期无效且不能正常工作,调试器的值为“\uuuu proto\uuuu:invalid Date” 我尝试了以下所有方法: var d = new Date(); var d = new Date('2012-10-08'); var d = new Date('2012-10-08 00:00:00'); var d = new Date(Dat

我一整天都在为这件事生气。无论我如何初始化Javascript日期,我似乎都无法获得有效的日期对象。。。通过使用Chrome的调试器检查日期,我假设该日期无效且不能正常工作,调试器的值为“\uuuu proto\uuuu:invalid Date”

我尝试了以下所有方法:

var d = new Date();
var d = new Date('2012-10-08');
var d = new Date('2012-10-08 00:00:00');
var d = new Date(Date('2012-10-08'));
var d = new Date(Date.parse('2012-10-08'));
var d = new Date(2012,10,08);
var d = new Date("October 13, 1975 11:13:00");
还有无数其他的尝试

这是iOS中的一个问题,我试图从这些日期对象中获取值,但每个函数只返回NaN。我更愿意避免使用外部库或将YYYY-MM-DD格式转换为任何其他格式,因为我正在尝试使用HTML5 input type=“date”,为移动站点提供最少的代码


本质上,这归结为:使日期对象有效的参数是什么

调用该方法有三种方式:

  • 从历元开始的毫秒数:

    new Date(milliseconds)
    
  • 任何:

  • 单个参数:

    new Date(year, month, day [, hour, minute, second, millisecond])
    new Date(1988,11,02,10,0,0);  
    

    • 调用该方法有三种方式:

      • 从历元开始的毫秒数:

        new Date(milliseconds)
        
      • 任何:

      • 单个参数:

        new Date(year, month, day [, hour, minute, second, millisecond])
        new Date(1988,11,02,10,0,0);  
        

      不要信任Date对象来解析字符串,必须手动执行。给定格式
      2012-10-08

      function stringToDate(s) {
          s = s.match(/\d+/g);
          if (s) {
              return new Date(s[0], --s[1], s[2]);
          } 
      }
      
      您可能需要对输入字符串和结果日期对象进行一些验证,上面只显示了转换

      编辑 顺便说一句,在所有浏览器中,唯一一种似乎可以一致解析的字符串格式是美国特有的
      month/date/year
      格式。没有任何规范支持它的使用,也没有任何理由相信浏览器将继续支持它,除了实用主义和“遗留”原因

      对于绝大多数地区来说,“2012年2月3日”被解读为3月2日,因此2月3日的到来可能出乎意料

      一旦旧版本的IE不再使用(可能需要几年时间),按照ECMA-262使用ISO8601扩展格式应该是安全的。然而,即使是支持它的浏览器也是不合适的。e、 g给定:

      new Date('2011-02-29');
      

      Firefox 15返回“无效日期”,即9和Chrome 22返回2011年3月1日的日期对象。

      不要相信日期对象解析字符串,必须手动执行。给定格式
      2012-10-08

      function stringToDate(s) {
          s = s.match(/\d+/g);
          if (s) {
              return new Date(s[0], --s[1], s[2]);
          } 
      }
      
      您可能需要对输入字符串和结果日期对象进行一些验证,上面只显示了转换

      编辑 顺便说一句,在所有浏览器中,唯一一种似乎可以一致解析的字符串格式是美国特有的
      month/date/year
      格式。没有任何规范支持它的使用,也没有任何理由相信浏览器将继续支持它,除了实用主义和“遗留”原因

      对于绝大多数地区来说,“2012年2月3日”被解读为3月2日,因此2月3日的到来可能出乎意料

      一旦旧版本的IE不再使用(可能需要几年时间),按照ECMA-262使用ISO8601扩展格式应该是安全的。然而,即使是支持它的浏览器也是不合适的。e、 g给定:

      new Date('2011-02-29');
      

      Firefox 15返回“无效日期”,即9和Chrome 22返回2011年3月1日的日期对象。

      如果您主要关心的是解析,那么看看哪一个明显优于您自己解析。(IMHO)

      如果你主要关心的是解析,那么看看哪种方法明显优于你自己解析东西。(IMHO)

      结果表明jQuery没有在iOS中将.change()事件正确绑定到input type=“date”。将事件更改为.blur(),现在似乎一切正常。然而,似乎仍然无法在Chrome中创建有效的日期对象。。。另一天的问题


      谢谢大家的帮助

      结果是jQuery没有在iOS中将.change()事件正确绑定到input type=“date”。将事件更改为.blur(),现在似乎一切正常。然而,似乎仍然无法在Chrome中创建有效的日期对象。。。另一天的问题


      谢谢大家的帮助

      你可以试着读书,你可以试着读书,那是完全错误的。ECMA-262指定支持的唯一字符串是的版本,并且并非所有正在使用的浏览器都支持它
      新日期(1988,11,02)
      将变为1988年12月2日。@RobG MDN在Date.parse文档中说
      “一个表示RFC2822或ISO 8601日期的字符串。”
      。ES3似乎没有指定特定的格式-ISO8601要求是在ES5中引入的。@Dennis虽然MDN适合用于示例或Mozilla专有功能,但它不是一个规范。这是一个社区维基,本质上是观察到的行为。ECMAScript唯一适用于浏览器(以及一般的ECMAScript实现)的权限是ECMA-262。@RobG我是说直到ES5才有这方面的规范。在其发布之前,唯一的权威是观察。MDN有大量关于支持其他浏览器的文档,但在本例中显然没有。MSDN除了“IET”之外没有其他文档,这显然是错误的。ECMA-262指定支持的唯一字符串是的一个版本,并且并非所有正在使用的浏览器都支持它。
      新日期(1988,11,02)
      将变为1988年12月2日。@RobG MDN说
      “表示RFC2822或ISO 8601日期的字符串。“
      在Date.parse文档中。ES3似乎没有指定特定的格式-ISO8601要求是在ES5中引入的。@Dennis虽然MDN适合用于示例或Mozilla专有功能,但它不是一个规范。这是一个社区维基,本质上是观察到的行为。ECMAScript唯一适用于浏览器(以及一般的ECMAScript实现)的权限是ECMA-262。@RobG我是说直到ES5才有这方面的规范。在其发布之前,唯一的权威是观察。MDN有大量关于支持其他浏览器的文档,但在本例中显然没有。MSDN