2012-11-05 12 views
5

chcę użyć skorupę aby uzyskać czas epoki a później użyć JavaScript na stronie HTML, aby dostać inny czas epoki a następnie uzyskać różnicę między nimi ale Obawiam się, że czas epoka nie mogą być synchronizowane między różnymi skryptami więc ta różnica jest bezużytecznyjest epoka czas to samo na tym samym komputerze z diffent skryptów/programów

więc chcę wiedzieć, jeśli w tym samym czasie, używam skorupę i JavaScript, aby epoka tiem będzie wynik będzie taki sam, czy nie? jeśli nie, jaka jest różnica?

dziękuję!

+0

Zgaduję, że będą takie same, ale nie można im ufać, ponieważ przeglądarki mogą robić dziwne rzeczy lub użytkownik może zmienić niektóre ustawienia. Byłoby znacznie lepiej, gdybyś po prostu użył serwera, aby uzyskać czas epoki. –

+0

Mam na myśli, jeśli javascript działa na tym samym komputerze, co skrypt powłoki, czy będą one takie same – user1769686

+0

Wiem, co miałeś na myśli. Mówię tylko, że te rzeczy nie zawsze są całkowicie wiarygodne, ponieważ nie wszyscy podążają za specyfikacjami. Przeważnie powinny być takie same, tak. –

Odpowiedz

1

Jeśli masz na myśli liczbę sekund od epoki Uniksa (1970-01-01T00: 00: 00Z), to jest ona objęta właśnie tą definicją. Jedyne różnice, które powinieneś zobaczyć, są spowodowane przez:

  • inny czas wywołania wywołania systemowego, które zwraca go *);
  • niezsynchronizowane zegary na różnych systemach.

i ewentualnie:

  • niezsynchronizowanych zegarów o różnych rdzeni/procesorach fizycznych;
  • implementacja zależna od funkcji, która zwraca bieżący czas (np. Implementacja silnika JS może ewentualnie buforować wartość przez krótki czas, aby nie musieć robić rzeczywistej syscall, chociaż wątpię w to).

W zależności od potrzebnej rozdzielczości czasowej niektóre z nich nie stanowią problemu. Domyślam się, że jeśli nie potrzebujesz ziarnistości lepszej niż 1s, powinieneś być więcej niż w porządku (na tej samej maszynie).

*) należy również zauważyć, że w systemie jednordzeniowym nie można uzyskać tego samego czasu (przynajmniej z rozdzielczością ns) z różnych systemów, chyba że jądro przechowuje je w pamięci podręcznej, po prostu dlatego, że muszą wystąpić po jednym inne.

+0

Och, teoria jest trochę głęboka, więc jeśli używam skryptu powłoki i javascript na tej samej maszynie, mam nadzieję, że dokładność jest na poziomie 0,2 sekundy lub niższym, czy to możliwe, czy nie? – user1769686

+0

@ user1769686 Spodziewałbym się tak (faktycznie uważam, że powinno być więcej w skali ms). Pamiętaj jednak, że od czasu do czasu możesz zauważyć większe opóźnienia spowodowane większym obciążeniem komputera, szczególnie w przeglądarce wyświetlającej stronę. – peterph

0

Według ECMA-262 section 15.9.1.1:

Czas jest mierzony w milisekundach w ECMAScript od 01 stycznia 1970 UTC. W czasie wartości sekundowe sekundy są ignorowane. Przyjmuje się, że liczba wynosi dokładnie 86 400 000 milisekund na dzień.

Tak, tak, każda implementacja JavaScript, która jest zgodna ze standardem, musi zwracać dokładnie te same wartości, samemu zajmując się fizycznymi dziwactwami zegara. Jeśli źle ustawisz zegar systemowy, wszędzie będziesz mieć tę samą wartość.

Należy pamiętać, że definicja "epoki" i "sekund od" w innych językach i systemach może być różna (przynajmniej większość innych systemów używa sekund, a nie milisekund i najczęściej bierze pod uwagę sekundy przestępne), dzięki czemu można " t gwarantują, że czas JS, nawet podzielony przez 1000, będzie dopasowywał sygnaturę czasową z innej platformy lub systemu operacyjnego.

Powiązane problemy