Sé cómo compensar la zona horaria, pero lo que necesito es la capacidad de detectar algo como "América / Nueva York". ¿Es eso incluso posible desde JavaScript o es algo que voy a tener que estimar en función del desplazamiento?
Sé cómo compensar la zona horaria, pero lo que necesito es la capacidad de detectar algo como "América / Nueva York". ¿Es eso incluso posible desde JavaScript o es algo que voy a tener que estimar en función del desplazamiento?
Respuestas:
La API de internacionalización admite la obtención de la zona horaria del usuario y es compatible con todos los navegadores actuales.
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
Tenga en cuenta que en algunas versiones anteriores del navegador que admiten la API de internacionalización, la timeZone
propiedad se establece en en undefined
lugar de la cadena de zona horaria del usuario. Lo mejor que puedo decir, en el momento de escribir este artículo (julio de 2017), todos los navegadores actuales, excepto IE11 , devolverán la zona horaria del usuario como una cadena.
La respuesta más votada es probablemente la mejor manera de obtener la zona horaria, sin embargo, Intl.DateTimeFormat().resolvedOptions().timeZone
devuelve el nombre de la zona horaria de IANA por definición, que está en inglés.
Si desea el nombre de la zona horaria en el idioma del usuario actual, puede analizarlo a partir Date
de la representación de cadena de la siguiente manera:
function getTimezoneName() {
const today = new Date();
const short = today.toLocaleDateString(undefined);
const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });
// Trying to remove date from the string in a locale-agnostic way
const shortIndex = full.indexOf(short);
if (shortIndex >= 0) {
const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
// by this time `trimmed` should be the timezone's name with some punctuation -
// trim it from both sides
return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');
} else {
// in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
return full;
}
}
console.log(getTimezoneName());
Probado en Chrome y Firefox.
Por supuesto, esto no funcionará como se esperaba en algunos de los entornos. Por ejemplo, node.js devuelve un desplazamiento GMT (p GMT+07:00
. Ej. ) En lugar de un nombre. Pero creo que todavía se puede leer como alternativa.
PD No funcionará en IE11, solo como la Intl...
solución.
Puede utilizar este script. http://pellepim.bitbucket.org/jstz/
Repositorio de bifurcación o clonación aquí. https://bitbucket.org/pellepim/jstimezonedetect
Una vez que incluye el script, puede obtener la lista de zonas horarias en - jstz.olson.timezones
variable.
Y el siguiente código se utiliza para determinar la zona horaria del navegador del cliente.
var tz = jstz.determine();
tz.name();
¡Disfruta de jstz!
Recuperar zona horaria por nombre (es decir, "América / Nueva York")
moment.tz.guess();
Intl.DateTimeFormat().resolvedOptions().timeZone
Intl.DateTimeFormat().resolvedOptions().timeZone
devuelve undefined
, pero moment.tz.guess()
devuelve el valor correcto
Simplemente puede escribir su propio código usando la tabla de mapeo aquí: http://www.timeanddate.com/time/zones/
o use la biblioteca de zona horaria de momento: http://momentjs.com/timezone/docs/
Ver zone.name; // America/Los_Angeles
o esta biblioteca: https://github.com/Canop/tzdetect.js
Esto obtiene el código de zona horaria (por ejemplo, GMT
) en javascript antiguo (estoy usando el script de la aplicación de Google con el motor antiguo):
function getTimezoneName() {
return new Date().toString().get(/\((.+)\)/);
}
Solo pongo esto aquí en caso de que alguien lo necesite.
UTC
/ GMT
. Parece que otros están detallados; ej Pacific Daylight Time
.
Pruebe este código, consulte desde aquí
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
$(document).ready(function(){
var tz = jstz.determine(); // Determines the time zone of the browser client
var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.
alert(timezone);
});
</script>
En javascript, el método Date.getTimezoneOffset () devuelve el desplazamiento de la zona horaria de UTC, en minutos, para la configuración regional actual.
var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;
Moment'timezone será una herramienta útil. http://momentjs.com/timezone/
Convertir fechas entre zonas horarias
var newYork = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london = newYork.clone().tz("Europe/London");
newYork.format(); // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format(); // 2014-06-01T17:00:00+01:00