How to mock the browser's timezone? [duplicate]

匿名 (未验证) 提交于 2019-12-03 00:57:01

问题:

This question already has an answer here:

I want to test a location feature in a web site, to make this test I need to try different time-zones. I obtain the timezone with a javascript code, calling the following function:

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

Now this function returns to me 180 because I am in Argentina, I need to test with different time-zones. Somebody knows how to do this? Many thanks!!

回答1:

The accepted answer doesn't really mock the Date.getTimezoneOffset method, instead it expects you to use a different method with the same name.

It won't work on Date objects themselves and as Carl Meyer points out, it won't work for libraries like MomentJS.

A better way is to override the getTimezoneOffset method on the Date prototype, so that all instances of Date have the overridden method.

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


回答2:

You could use a function for this.

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

Where DEBUG is a variable set earlier on to determine whether you're testing or not.

Then use that function throughout your code, instead of the method on the Date object.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!