Je me bats avec ce problème depuis un moment maintenant. J'essaie de convertir l'époque en un objet date. L'époque m'est envoyée en UTC. Chaque fois que vous passez une date à new Date()
, il suppose qu'il s'agit de l'époque locale. J'ai essayé de créer un objet UTC, puis d'utiliser setTime()
pour l'ajuster à la bonne époque, mais la seule méthode qui semble utile est toUTCString()
et les chaînes ne m'aident pas. Si je passe cette chaîne dans une nouvelle date, il devrait remarquer qu'elle est en UTC, mais ce n'est pas le cas.
new Date( new Date().toUTCString() ).toLocaleString()
J'ai ensuite essayé d'obtenir la différence entre l'époque actuelle locale et l'époque actuelle UTC, mais je n'y suis pas parvenu non plus.
new Date( new Date().toUTCString() ).getTime() - new Date().getTime()
Je n'obtiens que de très petites différences, inférieures à 1000, qui sont exprimées en millisecondes.
Des suggestions ?
Vous voulez simplement convertir une chaîne UTC en une chaîne "locale" ? Vous pourriez le faire :
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 corrigé
@Amjad, bonne idée, mais mal mise en œuvre. Essayez
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();
}