如何模拟浏览器的时区?

McS*_*Sas 9 javascript browser timezone google-chrome mocking

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

var offset = new Date().getTimezoneOffset();
Run Code Online (Sandbox Code Playgroud)

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

JC *_*and 24

接受的答案并没有真正模拟该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
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是moment.js,则此功能对我不起作用。相反,我使用https://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/来获取原始时区,然后使用https://momentjs.com/timezone/docs/#/进行设置using-timezones / default-timezone /,还可以使用它在测试结束时将其重新设置。 (2认同)

归档时间:

查看次数:

16239 次

最近记录:

9 年,4 月 前