我正在尝试将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中使用它。
答案 0 :(得分:1)
因此,问题出在您的日期字符串格式。
通过阅读有关Date Object的Mozilla文档,我们可以看到您的字符串必须遵循IETF-compliant RFC 2822 timestamps和ISO8601。
如果我们打开第二个(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。