以下函数在 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;
因此返回的值是:(根据您所在的位置,它可能会有所不同)
- 现在 = 2014 年 5 月 6 日星期二 15:31:03 GMT+0300(东部夏令时间)
- timezoneOffset(第一次分割后)= +0300 (EEST)
- timezoneOffset(第二次分割后)= +0300
- timezoneOffset(在 substr 后并添加冒号)= +03:00
在 fiddle 上,您可以在 timezoneOffset = now.toString().split('GMT')[1];
之后发出警报,以查看 IE10 上的错误
最佳答案
您错误地假设 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/