【问题标题】:IE Date.toLocaleTimeString().split isn't returning an array of strings [duplicate]IE Date.toLocaleTimeString().split 没有返回字符串数组[重复]
【发布时间】:2016-11-07 09:30:03
【问题描述】:

这是直接来自 IE (Microsoft Edge 25.10) 中的控制台:

greg = new Date().toLocaleTimeString().split(':')[0];
"12"
greg = new Date().toLocaleTimeString().split(':')[0]=="12";
false

为什么?

【问题讨论】:

  • 什么版本的IE?
  • 12 是我的 ENV 中的小时,当你执行第二个代码时它可能变成了“13”。

标签: javascript arrays date internet-explorer


【解决方案1】:

这是因为字符串中有两个不可见字符:U-200E(从左到右的标记)在开头和结尾:

new Date().toLocaleTimeString().split(':')[0] == "\u200e12\u200e" // true

如果浏览器支持ECMA-402,toLocaleTimeStringECMA-402 定义here;否则,这完全取决于实施。 IE 不支持 ECMA-402,因此它可以在它喜欢的字符串中放入任何内容。包括从左到右的标记似乎是一件很奇怪的事情,但是......

【讨论】:

  • 哇...谢谢。看来我有一些阅读要做。我从来没有听说过你说的这个 u200e
  • T.J:知道为什么 IE 会这样做吗? Chrome 似乎没有...
  • @Cerbrus:不。 :-|坦率地说,这似乎是一件很奇怪的事情。
  • 我就是这么想的。我先查了[0].length,原来是4... wtf.
【解决方案2】:

奇怪的是,那个时间字符串中的数字周围似乎有一些不可见的字符:

这可以通过将拆分部分解析为整数来规避/解决:

var part = new Date(2016, 00, 01, 10, 55, 30) // Fri Jan 01 2016 10:55:30
    .toLocaleTimeString().split(':')[0];

console.log(part);
console.log(part == "10");
console.log(parseInt(part) == 10);

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 2017-10-09
    • 2015-05-11
    • 1970-01-01
    • 2020-08-27
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多