如何模拟浏览器的时区?

时间:2012-08-31 18:23:51

标签: javascript google-chrome browser mocking timezone

我想测试网站中的位置功能,为了进行此测试,我需要尝试不同的时区。我使用javascript代码获取时区,调用以下函数:

var offset = new Date().getTimezoneOffset();

现在这个函数返回给我180因为我在阿根廷,我需要测试不同的时区。有人知道怎么做吗? 非常感谢!!

2 个答案:

答案 0 :(得分:23)

接受的答案并没有真正模仿Date.getTimezoneOffset方法,而是希望您使用具有相同名称的其他方法。

它不适用于Date对象本身,而且正如Carl Meyer所指出的那样,它不适用于像MomentJS这样的库。

更好的方法是覆盖getTimezoneOffset原型上的Date方法,以便Date的所有实例都具有重写方法。

d = new Date(); // Mon Jul 13 2015 10:58:12 GMT+0200 (CEST)
alert(d.getTimezoneOffset()); // -120, My local "real" timezone.

// Save the original method.
var getTimezoneOffset = Date.prototype.getTimezoneOffset;

Date.prototype.getTimezoneOffset = function () {
    return 160;
}
// Now Date objects will have the mocked timezone offset
alert(d.getTimezoneOffset()); // 160, The mocked timezone.

// Now restore the method to its original version
Date.prototype.getTimezoneOffset = getTimezoneOffset;
alert(d.getTimezoneOffset()); // -120

答案 1 :(得分:-8)

您可以使用此功能。

function getTimezoneOffset() {
  if (DEBUG) {
    return 600; // for Australian Eastern Standard Time
  }

  return new Date().getTimezoneOffset();
}

其中DEBUG是先前设置的变量,用于确定您是否正在测试。

然后在整个代码中使用该函数,而不是使用Date对象上的方法。