以下功能在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(EEST)
timezoneOffset(第一次分割后)= +0300(EEST)
timezoneOffset(第二次分割后)= +0300
timezoneOffset(在substr和加冒号之后)= +03:00


摆弄小提琴,您可以在timezoneOffset = now.toString().split('GMT')[1];之后放置警报,以查看IE10上的错误

JSFiddle

最佳答案

您正在错误地假设now.toString()包含"GMT",让我们看看IE中实际上给出了什么(无论如何对我来说)。

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


注意没有格林尼治标准时间,而是UTC。

这意味着split_result[1]是未定义的,所以timezoneOffset是未定义的,因此会导致您的错误


  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;

10-02 17:25