【问题标题】:Date is invalid in IE and Firefox but is chrome it works fine日期在 IE 和 Firefox 中无效,但在 chrome 中可以正常工作
【发布时间】:2014-04-21 21:58:42
【问题描述】:
var stdate=document.forms["myForm"]["from"].value;
var endate=document.forms["myForm"]["to"].value;

var fromDate = new Date(stdate);
var toDate = new Date(endate);

alert(fromDate);

输入: 来自:2014 年 3 月 19 日下午 3:13:50

输出:(在 IE 和 Firefox 中) 无效日期

在 Chrome 浏览器中: 2014 年 3 月 19 日星期三 15:13:50 GMT-0400(东部夏令时间)

我应该使用什么日期格式以便所有浏览器都支持?或者应该怎么处理?

【问题讨论】:

  • 这里有一些有用的信息可能会有所帮助:w3schools.com/js/js_obj_date.asp
  • w3schools 一如既往地提供一些严重缺乏的文档...dateString 已列出,但根本没有指定...
  • Javascript Date 对象有一些跨浏览器的怪癖,可能会绊倒你。如果您使用日期字符串作为输入,我建议使用像 Moment.js 或 Date.js 这样的库作为包装器,以避免出现此类问题。
  • 我会使用 UTC 格式的 ISO8601 格式化字符串作为我的输入,然后手动将 split 这个字符串分成多个部分并将它们输入到我的 Date 构造函数中,从而避免日期解析问题。跨度>

标签: javascript google-chrome firefox


【解决方案1】:

在大多数情况下,new Date(datestring) 就是您所需要的。但是你需要仔细选择格式。

这是一个很好的兼容性表:http://dygraphs.com/date-formats.html

简短的版本是这样的:

  • 仅日期?使用YYYY/mm/DD; 从不以这种格式使用连字符
  • 需要时间,但本地时间可以吗?使用YYYY/mm/DD HH:MM:SS;同样,没有连字符
  • 可以忽略 IEYYYY-mm-DDTHH:MM:SSZ,或带时区)
  • 在 IE8 中需要 UTC 时间?你必须做一些聪明的事情。 Xotic 的答案在这里看起来不错。

【讨论】:

  • 这就是我解决问题的方法。我使用的是 iPhone safari 不支持的“-”。
【解决方案2】:

如 MSDN (IE) 上所述 - Date 构造函数支持 Date.parse 支持的格式的时间戳或日期字符串。根据the docs,这是RFC2822 或ISO 8601。一些示例:2011-10-10 或Mon, 25 Dec 1995 13:30:00 GMT 应该是有效的参数。

【讨论】:

    【解决方案3】:

    我会使用ISO8601 UTC格式的字符串作为我的输入,然后手动 split 把这根弦分成几部分,然后把它们送进我的 Date 构造函数从而避免日期解析问题。

    例子

    var iso8601 = '2014-03-19T03:13:50.000Z',
        parts = iso8601.slice(0, -1).split(/[\-T:]/),
        dateObject;
    
    parts[1] -= 1;
    dateObject = new Date(Date.UTC.apply(undefined, parts));
    
    console.log(dateObject.toUTCString());
    

    输出

    格林威治标准时间 2014 年 3 月 19 日星期三 03:13:50

    开启jsFiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2022-08-05
      • 2018-07-15
      相关资源
      最近更新 更多