Saltar al contenido

¿Cómo puedo convertir una fecha a GMT?

Solución:

[Update]

La respuesta de Matt Johnson es mucho mejor que esta.

new Date("Fri Jan 20 2012 11:51:36 GMT-0500").toUTCString()

https://stackoverflow.com/a/26454317/334274

Simplemente puede usar el toUTCString (o toISOString) métodos del objeto de fecha.

Ejemplo:

new Date("Fri Jan 20 2012 11:51:36 GMT-0500").toUTCString()

// Output:  "Fri, 20 Jan 2012 16:51:36 GMT"

Si prefiere un mejor control del formato de salida, considere usar una biblioteca como date-fns o moment.js.

Además, en su pregunta, en realidad ha convertido la hora de forma incorrecta. Cuando se muestra un desplazamiento en una cadena de marca de tiempo, significa que los valores de fecha y hora de la cadena tienen ya ha sido ajustado de UTC por ese valor. Para volver a convertir a UTC, invierta el signo antes de aplicar el desplazamiento.

11:51:36 -0300  ==  14:51:36Z

Aunque parece lógico, la respuesta aceptada es incorrecta porque las fechas de JavaScript no funcionan así.

Es muy importante tener en cuenta aquí que el valor numérico de una fecha (es decir, new Date()-0 o Date.now()) en JavaScript siempre se mide como milsegundos desde la época el cual es un Cantidad libre de zona horaria basada en un instante exacto preciso en la historia del universo. No es necesario sumar ni restar nada al valor numérico devuelto de Date() para convertir el valor numérico en una zona horaria, porque el valor numérico no tiene zona horaria. Si tuviera una zona horaria, todo lo demás en las fechas de JavaScript no funcionaría.

Las zonas horarias, los años bisiestos, los segundos bisiestos y todos los demás ajustes infinitamente complicados de nuestras fechas y horas locales se basan en este valor numérico coherente e inequívoco, y no al revés.

A continuación, se muestran ejemplos de cómo el valor numérico de una fecha (proporcionado al constructor de fechas) es independiente de la zona horaria:

En hora estándar central:

new Date(0);
// Wed Dec 31 1969 18:00:00 GMT-0600 (CST)

En Anchorage, Alaska:

new Date(0);
// Wed Dec 31 1969 15:00:00 GMT-0900 (AHST)

En París, Francia:

new Date(0);
// Thu Jan 01 1970 01:00:00 GMT+0100 (CET)

Es fundamental observar que en TODOS los casos, basado en el desplazamiento de época libre de zona horaria de cero milisegundos, el tiempo resultante es idéntico. La 1 am en París, Francia es exactamente el mismo momento que las 3 pm del día anterior en Anchorage, Alaska, que es exactamente el mismo momento que las 6 pm en Chicago, Illinois.

Por este motivo, la respuesta aceptada en esta página es incorrecta. Observar:

// Create a date.
   date = new Date();
// Fri Jan 27 2017 18:16:35 GMT-0600 (CST)


// Observe the numerical value of the date.
   date.valueOf();
// 1485562595732
// n.b. this value has no timezone and does not need one!!


// Observe the incorrectly "corrected" numerical date value.
   date.valueOf() + date.getTimezoneOffset() * 60000;
// 1485584195732


// Try out the incorrectly "converted" date string.
   new Date(date.valueOf() + date.getTimezoneOffset() * 60000);
// Sat Jan 28 2017 00:16:35 GMT-0600 (CST)

/* Not the correct result even within the same script!!!! */

Si tiene una cadena de fecha en otra zona horaria, sin conversión al objeto resultante creado por new Date("date string") es necesario. ¿Por qué? El valor numérico de JavaScript de esa fecha será el mismo independientemente de su zona horaria. JavaScript pasa automáticamente por procedimientos increíblemente complicados para extraer el número original de milisegundos desde la época, sin importar cuál era la zona horaria original.

La conclusión es que conectar una cadena de fecha textual x en el new Date(x) El constructor se convertirá automáticamente de la zona horaria original, cualquiera que sea, a la representación de milisegundos de época libre de zona horaria, que es la misma independientemente de cualquier zona horaria. En su aplicación real, puede elegir monitor la fecha en cualquier zona horaria que desee, pero NO agregue / reste al valor numérico de la fecha para hacerlo. Toda la conversión ya ocurrió en el instante en que se creó el objeto de fecha. La zona horaria ni siquiera está allí, porque el objeto de fecha se crea una instancia utilizando un sentido del tiempo definido con precisión y libre de zona horaria.

La zona horaria solo comienza a existir nuevamente cuando se considera al usuario de su aplicación. El usuario tiene una zona horaria, por lo que simplemente monitor esa zona horaria para el usuario. Pero esto también pasa automáticamente.

Consideremos algunas de las fechas de su pregunta original:

   date1 = new Date("Fri Jan 20 2012 11:51:36 GMT-0300");
// Fri Jan 20 2012 08:51:36 GMT-0600 (CST)


   date2 = new Date("Fri Jan 20 2012 11:51:36 GMT-0300")
// Fri Jan 20 2012 08:51:36 GMT-0600 (CST)

La consola ya conoce mi zona horaria, por lo que tiene automáticamente me mostró lo que esos tiempos significan para mí.

Y si desea saber la hora en representación GMT / UTC, ¡tampoco es necesaria ninguna conversión! No cambias la hora en absoluto. Simplemente muestra la cadena UTC de la hora:

    date1.toUTCString();
// "Fri, 20 Jan 2012 14:51:36 GMT"

Es casi seguro que el código que se escribe para convertir zonas horarias numéricamente utilizando el valor numérico de una fecha de JavaScript fallará. Las zonas horarias son demasiado complicadas, y es por eso que JavaScript fue diseñado para que usted no lo necesite.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *