有效的Javascript Date对象需要什么?

时间:2012-10-09 22:46:23

标签: javascript html html5 date

我整天都在为这一个敲打我的头。无论我如何初始化Javascript日期,我似乎无法获得有效的Date对象...我假设日期无效并且通过使用Chrome的调试器进行检查无法正常工作,该调试器的值为“__proto__:无效日期”。

我尝试了以下所有方法:

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中出现了一个问题,我试图从这些Date对象中获取值,但每个函数只返回NaN。我宁愿避免使用外部库或必须将YYYY-MM-DD格式转换为任何其他格式,因为我试图使用HTML5输入类型=“日期”使用最少的移动代码站点。

基本上归结为:使Date对象有效的参数是什么?!

4 个答案:

答案 0 :(得分:4)

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

function stringToDate(s) {
    s = s.match(/\d+/g);
    if (s) {
        return new Date(s[0], --s[1], s[2]);
    } 
}

您可能想要对输入字符串和生成的日期对象进行一些验证,上面只显示转换。

修改

BTW,似乎在所有浏览器中一致解析的唯一字符串格式是美国特定的month/date/year格式。没有任何规范可以支持它的使用,也没有任何理由相信浏览器会继续支持它,除了实用主义和"遗产"的原因。

对于绝大多数地区而言,' 2/3/2012'被解释为3月2日,因此2月3日可能会出乎意料。

一旦旧版本的IE不再使用(可能还需要几年),按照ECMA-262使用ISO8601扩展格式应该是安全的。但是,即使支持它的浏览器也是不一致的。例如:

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

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

答案 1 :(得分:1)

调用该方法有三种方法:

  • 纪元的毫秒数:

    new Date(milliseconds)
    
  • 任何IETF-compliant RFC 2822 timestamp

    new Date("November 2, 1988 10:00:00");
    
  • 个人args:

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

答案 2 :(得分:1)

如果您主要关注的是解析,请查看Moment.js,这明显优于自己解析的内容。 (IMHO)

答案 3 :(得分:0)

原来,jQuery没有将.change()事件绑定到iOS中正确输入type =“date”。将事件更改为.blur(),现在一切似乎都有效。但是,似乎无法在Chrome中创建有效的日期对象......这是另一天的问题。

感谢大家的帮助!