Date.getTime() 在 IE11 中为 ISO/Twitter API 日期返回 NaN

mar*_*zzz 1 javascript internet-explorer timestamp date

这是我的代码

var date = "2014-07-23T15:23:12+0000";
var ts = new Date(date).getTime();
console.log(ts);
Run Code Online (Sandbox Code Playgroud)

为什么 IE11 打印NaN

Firefox/Chrome/等浏览器打印没有问题1406128992000

Sal*_*n A 5

引自 ECMAScript 语言规范,日期时间字符串格式部分

ECMAScript 基于 ISO 8601 扩展格式的简化定义了日期时间的字符串交换格式。格式如下:YYYY-MM-DDTHH:mm:ss.sssZ
...
Z是指定为“Z”(对于 UTC)或“+”或“-”后跟时间表达式 HH:mm 的时区偏移

显然,您需要:在时区指示符中添加一个。这应该适用于 IE9:

var dateString = "2014-07-23T15:23:12+0000";
var dateStringISO = dateString.replace(/([+\-]\d\d)(\d\d)$/, "$1:$2");
var timestamp = new Date(dateStringISO).getTime();
console.log(dateString, dateStringISO, timestamp);
Run Code Online (Sandbox Code Playgroud)

对于 Twitter 日期,您可以使用相同的策略:

var dateString = "Mon Jan 13 16:04:04 +0000 2014";
var dateStringISO = dateString.replace(/^... (...) (..) (........) (...)(..) (....)$/, function(match, month, date, time, tz1, tz2, year) {
  return year + "-" + {
    Jan: "01",
    Feb: "02",
    Mar: "03",
    Apr: "04",
    May: "05",
    Jun: "06",
    Jul: "07",
    Aug: "08",
    Sep: "09",
    Oct: "10",
    Nov: "11",
    Dec: "12"
  }[month] + "-" + date + "T" + time + tz1 + ":" + tz2;
});
var timestamp = new Date(dateStringISO).getTime();
console.log(dateString, dateStringISO, timestamp);
Run Code Online (Sandbox Code Playgroud)