IE和Firefox中的日期无效,但Chrome是正常的

时间:2014-03-16 19:31:41

标签: javascript google-chrome firefox

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日下午03:13:50

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

Chrome浏览器中的

: 2014年3月19日星期三15:13:50 GMT-0400(东部夏令时)

我应该使用哪种日期格式以便所有浏览器都支持?或者我该如何处理?

3 个答案:

答案 0 :(得分:1)

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

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

简短版本是:

  • 仅限日期?使用YYYY/mm/DD; 从不使用此格式的连字符
  • 需要时间,但当地时间还可以吗?使用YYYY/mm/DD HH:MM:SS;再次,没有连字符
  • 可以忽略IE< 9?考虑使用ISO8601整秒(YYYY-mm-DDTHH:MM:SSZ或时区)
  • 在IE8中需要UTC时间吗?你必须做一些聪明的事。 Xotic的答案看起来很不错。

答案 1 :(得分:0)

如MSDN(IE)中所述 - Date构造函数支持Date.parse支持的格式中的时间戳或Datestring。根据{{​​3}},这是RFC2822或ISO 8601.一些例子:2011-10-10Mon, 25 Dec 1995 13:30:00 GMT应该是有效的参数。

答案 2 :(得分:0)

  

我会使用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());

输出

Wed, 19 Mar 2014 03:13:50 GMT 

jsFiddle