Corregir fechas de UTC a hora local (GMT +/-??) en JavaScript

En Internet, como es universal y los servidores pueden estar en cualquier sitio, lo mejor es trabajar con fechas en UTC.

El problema es para mostrar el tiempo hora localizado para el usuario cuano obtenemos los datos de una fuente de Datos, por ejemplo, un XML. Para ello podemos recurrir a las funciones de fecha de JavaScript, que nos permiten saber y corregir esta diferencia.

Concretamente, al hecho de que si ponemos valores negativos o excesivos en una de las componentes de la fecha ésta se autocorrige:

// GMT contiene nuestra desviación horaria:
var GMT = 1;
// Creamos un objeto date con la fecha en GMT sumándole la diferéncia horaria, aunque pueda resultar una hora incorrecta:
var d=new Date(Año, Mes, Dia, Hora + GMT, Minutos, Segundos);
// Como el objeto Date se recalcula, le pedimos las componentes una a una. Aquí puedes cambiarlo a tu gusto, para obtener la fecha en el formato que desees:
var datetime = d.getDate() + "/" + (d.getMonth()+1) + "/" + d.getFullYear() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();

Además, podemos saber la desviación horária del visitante mediante el mismo objeto date, con lo que podemos asignar GMT correctamente para cada visitante:

var d = new Date();
var GMT = d.getTimezoneOffset() / 60;
Con lo que unido y aplicando la corrección a los minutos en lugar de a los segundos quedaría:

// GMT contiene nuestra desviación horaria:
var d = new Date();
var GMT = d.getTimezoneOffset();

// Creamos un objeto date con la fecha en GMT sumándole la diferéncia horaria, aunque pueda resultar una hora incorrecta:
var d=new Date(Año, Mes, Dia, Hora, Minutos + GMT, Segundos);
// Como el objeto Date se recalcula, le pedimos las componentes una a una. Aquí puedes cambiarlo a tu gusto, para obtener la fecha en el formato que desees:
var datetime = d.getDate() + "/" + (d.getMonth()+1) + "/" + d.getFullYear() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();

Ahora mismo he empezado a plicarlo en la web, en concreto en los tagboards y funciona a la perfección.


También te puede interesar la explicación para localizar las fechas desde UTC en PHP.

    Editado por Daniel el 27/11/2008 a las 19:53:09h.