javascript:IE将ISO转换为本地时间的替代方法

时间:2018-09-20 21:00:07

标签: javascript

我正在尝试将ISO时间转换为本地时间。

这是我的代码:

yoursite.products

此代码在chrome中工作正常,但在IE中却给出错误。 第一行代码给了我var local_date = new Date('2018-09-11T06:22:39.000-0400'); local_date.toLocaleDateString(); local_date.toLocaleTimeString();

寻找适用于所有浏览器的修复程序。

仅供参考:我不想使用moment.js或任何其他库,而希望在普通javascript中使用它。

1 个答案:

答案 0 :(得分:1)

因此,问题出在您的日期字符串格式。

通过阅读有关Date Object的Mozilla文档,我们可以看到您的字符串必须遵循IETF-compliant RFC 2822 timestampsISO8601

如果我们打开第二个(ISO8601),我们会看到可接受的格式为YYYY-MM-DDTHH:mm:ss.sssZ,其中Z可能是(+|-)HH:mm

因此,如果执行new Date('2018-09-11T06:22:39.000-0400');,它会代替new Date('2018-09-11T06:22:39.000-04:00');

如果您不想手动添加,则可以使用this answer中的splice方法和代码自动完成:

// A nice Polyfill
if (!String.prototype.splice) {
    String.prototype.splice = function(start, delCount, newSubStr) {
        return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount));
    };
}

// Your code
var dateString = '2018-09-11T06:22:39.000-0400'.splice(26, 0, ":");
var local_date = new Date(dateString);
local_date.toLocaleDateString();
local_date.toLocaleTimeString();

我并不是说2018-09-11T06:22:39.000-0400的格式无效,而是IE无法接受。

此外,如果您想vanilla javascript,则应该完全停止打开IE。