2012-03-06 14 views

Odpowiedz

5

Dlaczego nie po prostu wysłać datę w UTC, a następnie przekonwertować na strefę czasową na serwerze?

var utcEpochSeconds = dateObj.getTime() + (dateObj.getTimezoneOffset() * 60000); 
+0

Zdecydowanie najlepsze rozwiązanie, ponieważ lokalny komputer niekoniecznie zna przesunięcie strefy czasowej serwera. Nadal nie mogę się domyślić, dlaczego nie istnieje metoda 'dateObj.getUTCTime()'. – RobG

+0

UTC jest zawsze taki sam, bez względu na wszystko? (zasysam rzeczy z timezone) – Tobias

+1

Tak, chyba że twój zegar jest źle skonfigurowany lub podróżujesz z relatywistycznymi prędkościami: http://pl.wikipedia.org/wiki/Coordinated_Universal_Time – tjdett

0

Zastosowanie toISOString dostać UTC znacznik czasu.

var date = new Date(); 
date.toISOString(); // EST would be 6 hour diff from GMT 
+0

'toISOString()' to ES5 i nie jest jeszcze obsługiwane przez dobry procent używanych przeglądarek internetowych. Nie jest trudne do naśladowania dla tych, którym go brakuje. – RobG

+0

Czy to nie tylko stary IE, który go nie obsługuje? : P Tak czy inaczej, stwórz podkładkę. – Trevor

1

Aby tak się stało, trzeba zastosować strefy czasowej do czasu, a następnie usunąć przesunięcie od wartości (test ten, jestem zgadywania z pamięci):

var now = new Date(), 
    offset = -(now.getTimezoneOffset() * 60 * 1000), // now in milliseconds 
    userUnixStamp = +now + offset; 

Teraz zrób to sam:

var now = new Date(), 
    offset = now.getTimezoneOffset() * 60 * 1000, 
    yourUnixStamp = userUnixStamp - offset; 
+0

można zawinąć to w przykładzie, w którym klient bez względu na to, co zwróci ten sam znacznik czasu dla los angeles? bo nie mogę teraz owijać tego wokół siebie ... wciąż uzyskuję różne wyniki. * brainmelt – Tobias

+0

Czy mógłbyś wyjaśnić sytuację trochę więcej? Skąd pochodzi data? Jak się masz? – Eli

+0

Muszę zachować klienta strefy czasowej w tym samym czasie serwera - już ustawiłem czas serwera na UTC tylko po to, aby było łatwiej - teraz próbowałem wygenerować czas UTC z tym: var d = new Date(); var utc = Math.round (d.getTime() + (d.getTimezoneOffset() * 60000)/1000); ale zawsze zwraca mikroprocesor (dlaczego ?! jest/1000) znacznik czasu, który jest 8 godzin naprzód ... – Tobias

Powiązane problemy