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();Con lo que unido y aplicando la corrección a los minutos en lugar de a los segundos quedaría:
var GMT = d.getTimezoneOffset() / 60;
// 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.