2012-08-31 19 views
6

Chcę przetestować funkcję lokalizacji na stronie internetowej, aby wykonać ten test, aby wypróbować różne strefy czasowe. I uzyskać strefę czasową z kodem JavaScript, wywołując następującą funkcję:Jak kpić ze strefy czasowej przeglądarki?

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

Teraz ta funkcja zwraca mi 180 bo jestem w Argentynie, muszę przetestować w różnych strefach czasowych. Ktoś wie, jak to zrobić? Wielkie dzięki!

+0

Zmień strefę czasową na komputerze. Tam właśnie przegląda przeglądarka. –

+2

Możesz także uruchomić przeglądarkę za pomocą innego TZ: http://stackoverflow.com/questions/11453740/fake-time-zone-for-web-app-testing –

Odpowiedz

16

Przyjęta odpowiedź nie kpi naprawdę z metody Date.getTimezoneOffset, zamiast tego oczekuje użycia innej metody o tej samej nazwie.

Nie będzie działać na obiektach Date, a jak zauważy Carl Meyer, nie będzie działać dla bibliotek takich jak MomentJS.

Lepszym sposobem jest przesłonięcie metody getTimezoneOffset na prototypie Date, tak aby wszystkie wystąpienia Date miały zastąpioną metodę.

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 
+0

W zależności od biblioteki, z której korzystasz, niektóre biblioteki będą chciały zrobić to "na swój sposób". A próba "naprawienia" tych bibliotek dodatkowym kodem może niespodziewanie przerwać ... szczególnie dla osób używających [zasady hollywood] (https://en.wikipedia.org/wiki/Inversion_of_control). Byłoby lepiej, gdyby istniało [odpowiednie narzędzie programistyczne] (http://stackoverflow.com/questions/4976696/how-do-i-test-my-browser-timezone-dependent-application-againts-different-timezo#comment58949204_4976769) za to ... – Pacerier

+0

Odpowiedź ma sens, ale patrząc na kod, może brakować instrukcji, aby zapisać oryginalną wersję, coś jak 'var getTimezoneOffset = Date.prototype.getTimezoneOffset;' – mikeapr4

+0

Dzięki @ mikeapr4, masz rację. Dodałem brakujące zadanie. –

-7

Można użyć do tego funkcji.

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

    return new Date().getTimezoneOffset(); 
} 

Gdzie DEBUG jest zmienną ustawiony wcześniej w celu ustalenia, czy testujesz, czy nie.

Następnie należy użyć tej funkcji w całym kodzie, zamiast metody w obiekcie Date.

+5

Nie pomoże to, jeśli używasz biblioteki jak 'MomentJS' - nie możesz zmusić go do użycia funkcji otoki. –

Powiązane problemy