Llevo un rato luchando con esto. Estoy tratando de convertir la época en un objeto de fecha. El epoch se me envía en UTC. Cada vez que le pasas a new Date()
una época, asume que es una época local. He intentado crear un objeto UTC, y luego usar setTime()
para ajustarlo a la época adecuada, pero el único método que parece útil es toUTCString()
y las cadenas no me ayudan. Si paso esa cadena a una nueva fecha, debería notar que es UTC, pero no lo hace.
new Date( new Date().toUTCString() ).toLocaleString()
Mi siguiente intento fue tratar de obtener la diferencia entre la época actual local y la época actual UTC, pero tampoco pude conseguirlo.
new Date( new Date().toUTCString() ).getTime() - new Date().getTime()
Sólo me da diferencias muy pequeñas, por debajo de 1000, que es en milisegundos.
¿Alguna sugerencia?
¿Sólo pide convertir una cadena UTC a una cadena "local"? Podrías hacerlo:
var utc_string = '2011-09-05 20:05:15';
var local_string = (function(dtstr) {
var t0 = new Date(dtstr);
var t1 = Date.parse(t0.toUTCString().replace('GMT', ''));
var t2 = (2 * t0) - t1;
return new Date(t2).toString();
})(utc_string);
EDIT
var utcDate = new Date(incomingUTCepoch);
var date = new Date();
date.setUTCDate(utcDate.getDate());
date.setUTCHours(utcDate.getHours());
date.setUTCMonth(utcDate.getMonth());
date.setUTCMinutes(utcDate.getMinutes());
date.setUTCSeconds(utcDate.getSeconds());
date.setUTCMilliseconds(utcDate.getMilliseconds());
EDIT arreglado
@Amjad, buena idea, pero mal implementada. Prueba con
Date.prototype.setUTCTime = function(UTCTimestamp) {
var UTCDate = new Date(UTCTimestamp);
this.setUTCFullYear(UTCDate.getFullYear(), UTCDate.getMonth(), UTCDate.getDate());
this.setUTCHours(UTCDate.getHours(), UTCDate.getMinutes(), UTCDate.getSeconds(), UTCDate.getMilliseconds());
return this.getTime();
}