2012-08-31 17 views
6

Voglio testare una funzione di localizzazione in un sito web, per fare questo test ho bisogno di provare diversi fusi orari. Ottengo il fuso orario con un codice javascript, chiamando la seguente funzione:Come prendere in giro il fuso orario del browser?

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

Ora questa funzione restituisce a me 180 perché sono in Argentina, ho bisogno di testare con diversi fusi orari. Qualcuno sa come farlo? Mille grazie !!

+0

Modificare il fuso orario del computer. Ecco dove arriva il browser. –

+2

Puoi anche avviare il tuo browser con un TZ diverso: http://stackoverflow.com/questions/11453740/fake-time-zone-for-web-app-testing –

risposta

16

La risposta accettata non prende in giro il metodo Date.getTimezoneOffset, invece si aspetta che tu usi un metodo diverso con lo stesso nome.

Non funzionerà sugli oggetti Data stessi e, come sottolinea Carl Meyer, non funzionerà per le librerie come MomentJS.

Un modo migliore è quello di eseguire l'override del metodo getTimezoneOffset sul prototipo Date, in modo che tutte le istanze di Date hanno il metodo di override.

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

A seconda della libreria che si utilizza, alcune librerie vorranno farlo "a modo loro". E provare a "aggiustare" queste librerie con un codice addizionale potrebbe rompere le cose in modo imprevisto .... specialmente per chi usa [principio di hollywood] (https://en.wikipedia.org/wiki/Inversion_of_control). Sarebbe meglio se ci fosse uno [strumento di sviluppo appropriato] (http://stackoverflow.com/questions/4976696/how-do-i-test-my-browser-timezone-dependent-application-againts-different-timezo#comment58949204_4976769) per questo .... – Pacerier

+0

La risposta ha senso per me, ma guardando il codice, potrebbe mancare l'istruzione per salvare la versione originale, qualcosa come 'var getTimezoneOffset = Date.prototype.getTimezoneOffset;' – mikeapr4

+0

Grazie @ mikeapr4, hai ragione. Ho aggiunto il compito mancante. –

-7

È possibile utilizzare una funzione per questo.

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

    return new Date().getTimezoneOffset(); 
} 

Dove DEBUG è una variabile impostata in precedenza per determinare se si sta testando o no.

Quindi utilizzare questa funzione per tutto il codice, invece del metodo sull'oggetto Date.

+5

Questo non aiuta se stai usando una libreria come 'MomentJS' - non puoi forzare l'uso della funzione wrapper. –

Problemi correlati