javascript - JS split() 在 IE10 及以下版本出错

标签 javascript regex internet-explorer expression

以下函数在 Chrome、FF 和 IE11 上运行良好。但是我无法让它在 IE 10 上工作。当我尝试拆分返回的字符串时,拆分返回未定义。

这是我的功能:

var now = new Date(), timezoneOffset;

timezoneOffset = now.toString().split('GMT')[1];
timezoneOffset = timezoneOffset.split(' ')[0];
timezoneOffset = timezoneOffset.substr(0, 3) + ':' + timezoneOffset.substr(3, 2);

return timezoneOffset;

因此返回的值是:(根据您所在的位置,它可能会有所不同)

  1. 现在 = 2014 年 5 月 6 日星期二 15:31:03 GMT+0300(东部夏令时间)
  2. timezoneOffset(第一次分割后)= +0300 (EEST)
  3. timezoneOffset(第二次分割后)= +0300
  4. timezoneOffset(在 substr 后并添加冒号)= +03:00

在 fiddle 上,您可以在 timezoneOffset = now.toString().split('GMT')[1]; 之后发出警报,以查看 IE10 上的错误

JSFiddle

最佳答案

您错误地假设 now.toString() 包含 "GMT",让我们看看 IE 中实际给出的内容(无论如何对我来说);

"Tue May 6 13:48:08 UTC+0100 2014"

注意,不是GMT,而是UTC

这意味着 split_result[1]未定义,因此 timezoneOffset未定义,因此您的错误 p>

Unable to get property 'split' of undefined or null reference

无论如何,这都不是获取时区偏移量的最佳方式,因为我们已经为此提供了一种方法

date.getTimezoneOffset(); // offset in minutes i.e. for me it is -60

现在您可以将此数字转换为您想要的格式;

var o = date.getTimezoneOffset();
var x = Math.abs(o),
    sign = (x === o ? '-' : '+' ),
    m = x % 60,
    h = (x - m) / 60;
m = (m < 10 ? '0' : '') + m;
h = (h < 10 ? '0' : '') + h;

return sign + h + ':' + m;

关于javascript - JS split() 在 IE10 及以下版本出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23495028/

相关文章:

c++ - 在 C++ 应用程序的使用中需要对数组、 vector 和映射进行说明

java - 正则表达式 : Splitting String into Fixed Length w/o Breaking Words AND Including Specials

javascript - 如何用水平滚动修复表头?

javascript - 在服务器端处理 Node 中的异步响应

javascript - 为什么这个 ng-idle 实现没有连接模式和样式?

html - 提交按钮不起作用

html - 在 IE11 中使用 flex 时菜单项重叠

javascript - 在现代浏览器中,基于 DOM 的 XSS 攻击是否仍然可能?

c# - RegEx.IsMatch() 与 String.ToUpper().Contains() 性能对比

internet-explorer - 如何让 IE 页面请求存活超过 1 分钟?