IE10及以下版本中的JS split()错误

时间:2014-05-06 12:40:34

标签: javascript regex internet-explorer expression

以下功能适用于Chrome,FF和IE11。但是我不能让它在IE 10上工作。当我尝试拆分返回的字符串时,split返回undefined。

这是我的功能:

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. now = Tue May 06 2014 15:31:03 GMT + 0300(EEST)
  2. timezoneOffset(首次拆分后)= + 0300(EEST)
  3. timezoneOffset(第二次分割后)= +0300
  4. timezoneOffset(在substr和添加冒号之后)= +03:00
  5. 在小提琴上,您可以在timezoneOffset = now.toString().split('GMT')[1];之后发出提醒以查看IE10上的错误

    JSFiddle

1 个答案:

答案 0 :(得分:6)

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

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

请注意 GMT ,但 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;