2011-09-13 9 views
20

Proszę spojrzeć na poniższy kod. Jakie jest najlepsze podejście do dodawania lub odejmowania różnic stref czasowych od poniższej zmiennej targetTime. Wartości strefy czasowej GMT pochodzą z DB w tym formacie: 1.00 dla czasu londyńskiego, -8.00 dla czasu Pasific i tak dalej.dodaj lub odejmij różnicę strefy czasowej do javascript Data

Kod wygląda następująco:

date = "September 21, 2011 00:00:00"; 
targetTime = new Date(date); 

Odpowiedz

39

Można użyć Date.getTimezoneOffset która zwraca lokalne przesunięcie od GMT w minutach. Zwróć uwagę, że zwraca wartość z przeciwnym znakiem, jakiego możesz się spodziewać. Więc GMT-5 wynosi 300, a GMT + 1 to -60.

var date = "September 21, 2011 00:00:00"; 
var targetTime = new Date(date); 
var timeZoneFromDB = -7.00; //time zone value from database 
//get the timezone offset from local time in minutes 
var tzDifference = timeZoneFromDB * 60 + targetTime.getTimezoneOffset(); 
//convert the offset to milliseconds, add to targetTime, and make a new Date 
var offsetTime = new Date(targetTime.getTime() + tzDifference * 60 * 1000); 
+1

byłoby to poprawne, ale jeśli to jest oszczędność czasu letniego w danym kraju, a teraz jeśli GMT +2 było powiedzieć, że to teraz + 1 – halliewuud

+5

getTimezoneOffset accounts dla czasu letniego. Jestem w amerykańskiej strefie czasowej wschodniej, która jest zwykle GMT-5, ale GMT-4 w świetle dziennym. Jeśli teraz zadzwonię do getTimezoneOffset w mojej przeglądarce, otrzymam 240, czyli GMT-4. To oczywiście zajmuje się tylko oszczędnością czasu letniego na czas lokalny. Przesunięcie strefy czasowej od DB powinno być dostosowane do czasu letniego na zapleczu. – alexp

6

Prosta funkcja, która działa dla mnie:

adjustForTimezone(date:Date):Date{ 
    var timeOffsetInMS:number = date.getTimezoneOffset() * 60000; 
    date.setTime(date.getTime() - timeOffsetInMS); 
    return date 
} 
Powiązane problemy