zona obtener objeto manejo horaria hora fechas fecha actual javascript datetime timezone

objeto - obtener fecha y hora actual javascript



Obtener la zona horaria del cliente(no la cantidad de compensaciĆ³n GMT) en JS (5)

Necesito determinar la zona horaria del cliente (por ejemplo, CET, GMT, EST) en JS. Obtener el desplazamiento es sencillo, pero no tiene toda la información necesaria para determinar la TZ, al menos no fácilmente. Tengo la sensación de que podría ser posible usar una combinación de compensación, si el horario de verano está en uso y en efecto, etc. pero espero que alguien más ya haya hecho el trabajo, especialmente considerando las extrañas excepciones cuando se trata del tiempo.

Esta pregunta es similar, pero tanto la pregunta como la respuesta se basan en el supuesto (incorrecto) de que el formato de DateString de cada navegador incluye el nombre de la zona horaria, que no lo hace. Ese es un detalle de implementación.

Entonces, con eso estoy actualmente atascado.


A partir de esta respuesta a otra pregunta, encontré que IP API también te da la zona horaria, bastante útil:

$.ajax({ url: "http://ip-api.com/json", type: ''GET'', success: function(json) { console.log("Timezone: " + json.timezone); }, error: function(err) { console.log("Request failed, error= " + err); } });


Lo que haría sería determinar el estándar y la desviación de la luz del día (que suena como si ya lo supiera. Si no, puede comenzar con esta referencia en http://onlineaspect.com/examples/timezone/detect_timezone.js por Josh Fraser). La determinación de la zona horaria siempre se puede hacer en el lado del servidor una vez que se conocen las desviaciones estándar y la luz del día. Luego se puede usar una llamada Ajax para que nunca se necesite una actualización de la página. El resultado final es que ahora tiene la zona horaria en el lado de JavaScript.


Podría rasparlo del método toString() de un objeto de fecha. new Date.toString() parecen al Wed Sep 19 2012 10:04:32 GMT-0400 (Eastern Daylight Time) en Firefox, Safari y Chrome. Los datos que desea están allí: las letras mayúsculas dentro de los paréntesis. Todo lo que se necesita es rasparlos.

En el caso de Internet Explorer, el resultado de toString() ya incluye el EDT .

En el caso de Opera, su única opción es conformarse con GMT-0400 o similar. No hay nada que se pueda raspar en el método toString() .

var now = new Date().toString(); var TZ = now.indexOf(''('') > -1 ? now.match(//([^/)]+/)/)[0].match(/[A-Z]/g).join('''') : now.match(/[A-Z]{3,4}/)[0]; if (TZ == "GMT" && /(GMT/W*/d{4})/.test(now)) TZ = RegExp.$1;

Resultados de ejemplo:

  • Firefox: TZ = "EDT"

  • Safari: TZ = "EDT"

  • Chrome: TZ = "EDT"

  • IE: TZ = "EDT"

  • Ópera: TZ = "GMT-0400"

Parece funcionar igual de bien con todas las zonas horarias asiáticas y europeas aleatorias que probé también, devolviendo WPST para Guam (Hora estándar del Pacífico Occidental), MPST para Kuala Lumpur (Hora estándar de la Península Malaya), etc .; y se degrada pacíficamente a la notación GMT + 0X00 donde el navegador no proporciona el nombre (Perth, por ejemplo).


Si solo quieres compensar, entonces esto es mucho más simple

var curdate = new Date ();

var offset = curdate.getTimezoneOffset ();


Vea esta pregunta . No es factible en el caso general, pero para elegir una zona horaria predeterminada de una lista de posibles casos, puede hacer una estimación decente.

Permitir que el usuario lo anule para cuando adivines mal.