2012-08-31 23 views
6

Quiero probar una función de ubicación en un sitio web, para hacer esta prueba necesito probar diferentes zonas horarias. Obtengo la zona horaria con un código JavaScript, llamando a la función siguiente:¿Cómo se burla de la zona horaria del navegador?

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

Ahora bien, esta función devuelve a mí 180 porque estoy en Argentina, tengo que probar con diferentes zonas horarias. Alguien sabe cómo hacer esto? ¡Muchas gracias!

+0

Cambie la zona horaria en su computadora. Ahí es donde lo consigue el navegador. –

+2

También podría iniciar su navegador con un TZ diferente: http://stackoverflow.com/questions/11453740/fake-time-zone-for-web-app-testing –

Respuesta

16

La respuesta aceptada no se burla realmente del método Date.getTimezoneOffset, en su lugar, espera que utilice un método diferente con el mismo nombre.

No funcionará en los objetos Date y, como señala Carl Meyer, no funcionará para bibliotecas como MomentJS.

Una mejor manera es anular el método getTimezoneOffset en el prototipo Date, por lo que todas las instancias de Date tienen el método reemplazado.

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

Dependiendo de la biblioteca que use, algunas bibliotecas querrán hacerlo "a su manera". Y tratar de "arreglar" estas bibliotecas con código adicional podría romper cosas inesperadamente ... especialmente para aquellos que usan [el principio de hollywood] (https://en.wikipedia.org/wiki/Inversion_of_control). Sería mejor si hay una [herramienta de desarrollador adecuada] (http://stackoverflow.com/questions/4976696/how-do-i-test-my-browser-timezone-dependent-application-againts-different-timezo#comment58949204_4976769) para ello .... – Pacerier

+0

La respuesta tiene sentido para mí, pero mirando el código, puede que le falte la instrucción para guardar la versión original, algo como 'var getTimezoneOffset = Date.prototype.getTimezoneOffset;' – mikeapr4

+0

Gracias @ mikeapr4, tienes razón. Agregué la tarea faltante. –

-7

Puede usar una función para esto.

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

    return new Date().getTimezoneOffset(); 
} 

Dónde DEBUG es una variable establecida anteriormente en determinar si se está probando o no.

Luego use esa función en todo su código, en lugar del método en el objeto Date.

+5

Esto no ayuda si está utilizando una biblioteca como 'MomentJS' - no puede obligarlo a usar su función de envoltura. –

Cuestiones relacionadas