我想測試一個網站的位置功能,爲了做這個測試我需要嘗試不同的時區。我得到了javascript代碼的時區,調用下面的函數:如何模擬瀏覽器的時區?
var offset = new Date().getTimezoneOffset();
現在,因爲我在阿根廷這個函數返回給我180,我需要用不同的時區進行測試。有人知道如何做到這一點? 非常感謝!
我想測試一個網站的位置功能,爲了做這個測試我需要嘗試不同的時區。我得到了javascript代碼的時區,調用下面的函數:如何模擬瀏覽器的時區?
var offset = new Date().getTimezoneOffset();
現在,因爲我在阿根廷這個函數返回給我180,我需要用不同的時區進行測試。有人知道如何做到這一點? 非常感謝!
接受的答案並不真正模擬Date.getTimezoneOffset
方法,而是它期望您使用具有相同名稱的不同方法。
它不會在Date對象本身上工作,正如Carl Meyer指出的那樣,它不適用於像MomentJS這樣的庫。
更好的方法是覆蓋Date
原型上的getTimezoneOffset
方法,以便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
根據你使用的庫,一些圖書館會想要「自己的方式」。並試圖用其他代碼「修復」這些庫可能會意外地破壞一些東西......尤其是那些使用[好萊塢原則](https://en.wikipedia.org/wiki/Inversion_of_control)的用戶。如果有[適當的開發人員工具]會更好(http://stackoverflow.com/questions/4976696/how-do-i-test-my-browser-timezone-dependent-application-againts-different-timezo#comment58949204_4976769)爲它.... – Pacerier
答案對我來說是有道理的,但看着代碼,它可能會缺少聲明來保存原始版本,就像'var getTimezoneOffset = Date.prototype.getTimezoneOffset;' – mikeapr4
Thanks @ mikeapr4,你是對的。我添加了缺失的任務。 –
你可以使用這個函數。
function getTimezoneOffset() {
if (DEBUG) {
return 600; // for Australian Eastern Standard Time
}
return new Date().getTimezoneOffset();
}
哪裏DEBUG
是設置在前面,以確定您是否正在測試或者不是一個變量。
然後在整個代碼中使用該函數,而不是Date對象上的方法。
如果你使用庫,這不會有幫助像'MomentJS' - 你不能強迫它使用你的包裝函數。 –
更改計算機上的時區。這就是瀏覽器獲取它的地方。 –
你也可以用不同的TZ啓動你的瀏覽器:http://stackoverflow.com/questions/11453740/fake-time-zone-for-web-app-testing –