IE JavaScript 日期解析错误

IT技术 datetime parsing javascript
2021-02-18 20:40:02

为什么 IE 不能将此字符串解析为 Date 对象。

var d = Date.parse("Fri Jun 11 04:55:12 +0000 2010"); // returns NaN

但是,它在 FireFox 中运行良好。我正在运行 IE 8。

谢谢。

6个回答

NaN在 IE 8 及其在 Firefox 中的工作中获得了value,因为字符串的格式因浏览器和操作系统而异。

例如,在 Windows XP 的 IE6 中,字符串采用以下格式:

Tue Dec 05 16:47:20 CDT 2006

但是在 Firefox for Windows XP 中,字符串是

Tue Dec 05 2006 16:47:20 GMT-0500

要使其与两个浏览器兼容,您必须首先检查您的 javascript 代码中的浏览器,然后相应地提供您的输入日期字符串。

但是所有浏览器和平台上都有兼容的通用格式吗?
2021-05-07 20:40:02
对我来说, .toJSON() 有效。它以类似于“yyyy-mm-ddTxx.xx”的格式返回日期。我在 IE8 和 FireFox 14 中尝试过。
2021-05-09 20:40:02
嗨,Internet Explorer 无法解析此日期 var date = new Date('23-JUL-15'); 而chrome可以解析它。我怎样才能在 IE 中做到这一点?
2021-05-10 20:40:02

我发现jQuery Globalization Plugin日期解析效果最好。其他方法存在跨浏览器问题,并且诸如 date.js 之类的东西已经有一段时间没有更新了。

您也不需要页面上的 datePicker。您可以调用类似于文档中给出的示例的内容:

$.datepicker.parseDate('yy-mm-dd', '2007-01-26');

通过创建日期对象解决了我的问题,并让我将时间戳归还给它。但是为此,您需要将字符串转换为这种格式:

year, month, date, hours, minutes, seconds,ms

一个例子是:

dateObj = new Date(year, month, date);
timestamp = dateObj.getTime();

这在 IE 和 FF 中有效。

IE 开发中心:日期对象 (JavaScript)

Mozilla 开发网络:日期

对于您的示例,您将执行以下操作:

//your string
var str = "Fri Jun 11 04:55:12 +0000 2010";
//maps months to integer from 0 to 11
var monthArray = {"Jan":0, "Feb":1, "Mar":2, "Apr":3, "May":4, "Jun":5, "Jul":6, "Aug":7, "Sep":8, "Oct":9, "Nev":10, "Dec":11};
//get the values from the string
var regex = /^[^ ]+ ([^ ]+) (\d{1,2}) (\d{2}):(\d{2}):(\d{2}) \+(\d{4}) (\d{4})$/;
match = regex.exec(str);
var month   = monthArray[match[1]],
    date    = match[2],
    hours   = match[3],
    minutes = match[4],
    seconds = match[5],
    ms      = match[6],
    year    = match[7];

//create date object with values
var dateObject = new Date(year, month, date, hours, minutes , seconds, ms);

var ts = dateObject.getTime(); //timestamp in ms
这!注意 jan 从 0 开始 :)
2021-04-22 20:40:02

问题

如果您的日期存储在SQLdatetime一样2020-04-07 05:30:00,想解析它在IE中。当您在 IE 中使用 JavaScript 解析它时new Date(),它会输出无效日期,而最新版本的 Chrome 和 Firefox 会正确解析此日期。

解决方案

必须更换<space>带有Tdatetime字符串从SQL到来。

例子

let myDate = '2020-04-07 05:30:00';
let myFormattedDate = myDate.replace(' ', 'T'); // '2020-04-07T05:30:00'
console.log(new Date(myFormattedDate));

因为+00000。尝试添加最后一个

var d = Date.parse("Fri Jun 11 04:55:12 2010 +0000");