Jeg har slitt med dette en stund nå. Jeg prøver å konvertere epoke til et datoobjekt. Epoken blir sendt til meg i UTC. Når du sender new Date()
en epoke, antar den at det er lokal epoke. Jeg har prøvd å opprette et UTC-objekt og deretter bruke setTime()
for å justere det til riktig epoke, men den eneste metoden som virker nyttig, er toUTCString()
, og strenger hjelper meg ikke. Hvis jeg legger strengen inn i en ny dato, skal den merke at det er UTC, men det gjør den ikke.
new Date( new Date().toUTCString() ).toLocaleString()
Det neste forsøket mitt var å prøve å finne differansen mellom lokal gjeldende epok og UTC gjeldende epok, men det klarte jeg heller ikke.
new Date( new Date().toUTCString() ).getTime() - new Date().getTime()
Det gir meg bare svært små forskjeller, under 1000, som er i millisekunder.
Har du noen forslag?
Ber du bare om å konvertere en UTC-streng til en "lokal" streng? Det kan du gjøre:
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 rettet
@Amjad, god idé, men dårlig implementert. Prøv
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();
}