即使日期格式支持 ISO 8601,IE11 中的日期也无效

Posted

技术标签:

【中文标题】即使日期格式支持 ISO 8601,IE11 中的日期也无效【英文标题】:Invalid date in IE11 even though date format is ISO 8601 supported 【发布时间】:2018-09-21 06:36:16 【问题描述】:

我已经使用 moment 将日期转换为支持 ISO 的格式,因为它在 chrome 和 firefox 上运行良好,但在 IE11 上却不行 我根据文档 YYYY-MM-DD 支持 iso 格式, 这里我的 js_time1 格式如前所述 ddd MMM D YYYY hh:mm:ss 所以我用它来格式化它

var js_time = moment(js_time1).format('YYYY-MM-DD');

我也试过 var js_time = moment(js_time1,'ddd MMM D YYYY hh:mm:ss').format('YYYY-MM-DD'); 但没有用。 js_time1 的格式为 Mon Aug 3rd 2018 12:12:21 提前致谢

【问题讨论】:

向我们展示js_time1的实际内容。但答案几乎可以肯定:解析时使用格式字符串:momentjs.com/docs/#/parsing/string-format @T.J.Crowder 我已经添加了格式。我的第二次尝试不是和你建议的一样吗 这可能不是原因,但请注意IE 11不支持input type=date,并自动将元素的type属性更改为text @ParthGoswami - 可能。再说一遍:Show 是js_time1 的实际内容。您已将“格式用于...”放在最后,但这正是其中的内容吗? (请注意 D3rd 不匹配。) 【参考方案1】:

假设 js_time1 是您显示的“格式” ("Mon Aug 3rd 2018 12:12:21"),则存在三个问题:

2018 年 8 月 3 日是星期五,而不是星期一。 您的解析格式将D 用于3rdD 不匹配序数,即Do。 您使用hh (1-12) 几个小时,这意味着与a 一起使用。我假设您的时间是 24 小时格式,所以是 HH

如果你修复了这些东西(包括修复字符串中的错误),它就会起作用:

var js_time1 = "Fri Aug 3rd 2018 12:12:21";
var js_time = moment(js_time1,'ddd MMM Do YYYY HH:mm:ss').format('YYYY-MM-DD');
console.log(js_time);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

【讨论】:

以上是关于即使日期格式支持 ISO 8601,IE11 中的日期也无效的主要内容,如果未能解决你的问题,请参考以下文章

iOS-时间格式ISO 8601

将日期对象转换为ISO 8601格式的字符串

识别 ISO 8601 中的时区

如何从busybox中的“日期”获取ISO8601秒格式?

ISO 8601:时间和日期的表示标准

将 Spring MVC 中的默认/全局日期格式设置为 ISO 8601