[JavaScript][PHP] Różnica w odmierzaniu czasu, jak znowelować lub zsynchronizować |
[JavaScript][PHP] Różnica w odmierzaniu czasu, jak znowelować lub zsynchronizować |
20.05.2020, 13:23:18
Post
#1
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
witam serdecznie, napisałem coś na szybko:
jest to sfiddlowane tu: https://www.tehplayground.com/CkYfUInJPBESsPjc generalnie u mnie w obecnym momencie pokazuje ze czas z serwera jest ok 13 sekund opozniony wzgledem przegladarki. Pytanie - czy daj się (i jak) to zniwelować a najlepiej zrobić jakiś button ze skryptem, który zaktualizuje czas w przeglądarce / systemie względem czasu PHP..? |
|
|
20.05.2020, 13:25:30
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 767 Pomógł: 1824 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Ale po co synchronizować? Bazuj wyłącznie na czasie pobranym z serwera.
-------------------- |
|
|
20.05.2020, 13:26:04
Post
#3
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
nie da się - co zrobić w przypadku countera w js na przyklad..? ktory musi na wszystkich urzadzeniach i przegladarkach odmierzac ten sam czas co do sekundy..? pomyslalem zeby uzytkownik mogl sobie sprawdzic jaki ma rozjazd i zsynchronizowac przyciskiem zeby sam nie musial w systemie edytowac czasu...
Ten post edytował shpaque 20.05.2020, 13:27:07 |
|
|
20.05.2020, 13:27:10
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Czas z serwera PHP: Wed May 20 2020 14:26:06 GMT+0200 (czas środkowoeuropejski letni)
Czas przeglądarki (JS): Wed May 20 2020 14:26:06 GMT+0200 (czas środkowoeuropejski letni) Na wolny komputer nic nie poradzisz. -------------------- |
|
|
20.05.2020, 13:31:57
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 767 Pomógł: 1824 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Co chcesz osiągnąć, zapewnić równą sekundę na wszystkich urządzeniach czy równą godzinę startową?
-------------------- |
|
|
20.05.2020, 13:35:09
Post
#6
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
no u mnie jest tak:
Czas z serwera PHP: Wed May 20 2020 14:32:03 GMT+0200 (czas środkowoeuropejski letni) Czas przeglądarki (JS): Wed May 20 2020 14:32:15 GMT+0200 (czas środkowoeuropejski letni) niestety w wiekszosci przypadkow w windowsie jest tak samo - na maku nie mam zadnego problemu bo generalnie czas jest synchronizowany, ale przeciez Microsoft w ogole zrezygnowal z automatycznej sunchronizacji czasu bodajze windows 7 juz nie mial tej opcji a jak mial to nie ma wspieranego serwera nie wiem - malo siedze w okienkach, w kazdym razie potrzebuje zlotego srodka najlepiej opcji zeby moc z poziomyu strony www przestawiuc zegar systemowy Co chcesz osiągnąć, zapewnić równą sekundę na wszystkich urządzeniach czy równą godzinę startową? wystarczy zeby przy przeladowaniu byla rowna - jako startowa, tak mysle - czyli przy uruchomieniu skryptu js z counterem (a nie w jego petli) |
|
|
20.05.2020, 14:08:10
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 767 Pomógł: 1824 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
wystarczy zeby przy przeladowaniu byla rowna - jako startowa, tak mysle - czyli przy uruchomieniu skryptu js z counterem (a nie w jego petli) No to jeszcze raz zasugeruję Ci, abyś pobrał ją z serwera. Tak jak zrobiłeś to w linii 6. -------------------- |
|
|
20.05.2020, 14:28:13
Post
#8
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
ok to teraz jak to zrobic kiedy skrypt korzysta z "jquery final countdown" i nie ma tam opcji wstawienia todaya
|
|
|
20.05.2020, 14:41:46
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 767 Pomógł: 1824 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Nie ma opcji wstawienia daty? To od jakiej odlicza?
Najlepiej gdybyś pokazał źródło tego skryptu, bo tych "final countdown" pewnie jest multum. -------------------- |
|
|
20.05.2020, 15:03:44
Post
#10
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
w zwyklym skrypcie zrobilem to tak:
i chyba jest ok a z api...
|
|
|
20.05.2020, 15:40:04
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 767 Pomógł: 1824 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Przecież jest nawet przykład: http://hilios.github.io/jQuery.countdown/
-------------------- |
|
|
20.05.2020, 19:54:49
Post
#12
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
Przecież jest nawet przykład: http://hilios.github.io/jQuery.countdown/ no tak ale to przyklad podmiany daty DO ktorej ma odliczac a nie startowej, czyli "now"... u mnie to tak wyglada:
szkoda, ze w tym api nie pomyslal gosciu zeby mozna bylo podmienic "now", wiec chyba jedna trzeba wrocic do mojego standardowego licznika js, ktorego mam zrobionego np w adminie u siebie i gdzie wydaje mi sie pokonalem roznice w czasie..:
|
|
|
20.05.2020, 20:00:16
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 767 Pomógł: 1824 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Zarzyj w kod tego pluginu. Jest tam ustawianie daty startowej właśnie jako new Date() (zmienna now).
Wystarczy, że dodasz metodę setStartDate i będziesz wartość przekazywał w wywołaniu. -------------------- |
|
|
20.05.2020, 20:31:03
Post
#14
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
w sumie racja...
Zarzyj w kod tego pluginu. Jest tam ustawianie daty startowej właśnie jako new Date() (zmienna now). Wystarczy, że dodasz metodę setStartDate i będziesz wartość przekazywał w wywołaniu. to moze mi troche pomozesz, rozumiem ze chodzi o ten wycinek
|
|
|
20.05.2020, 20:41:19
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 767 Pomógł: 1824 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Tu: https://github.com/hilios/jQuery.countdown/...ry.countdown.js lepiej widać.
Tak, to ten fragment. Czyli zamiast now możesz zmienić na this.startDate. Potrzebna jest analogiczna funkcja do tej z linii 178, ale ustawiająca właśnie this.startDate. Tam gdzie jest wywoływana setFinalDate, to i nowa setStartDate. W linii 120 jako trzeci argument startDate, options jako czwarty. W linii 244 dodatkowo argumentsArray[2], a w linii 236 slice(2). -------------------- |
|
|
23.05.2020, 21:17:31
Post
#16
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
ok zrobilem to sobie juz, teraz mam zagwostke przy tym skrypcie - niby odmieza czas:
i pokazuje oraz niweluje roznicę, ale w obecnym stanie: - nie zmienia się co sekundę (nie "chodzi") - jak zmienię "var updateDate = new Date(time);" na "var updateDate = new Date(Date(time));" to chodzi ale wszedzie pokazuje czas serwera, - jak zmienię "var updateDate = new Date(time);" na "var updateDate = new Date.now(time); chodzi ale wszedzie pokazuje zegar systemowy przyklad na maku przy skrypcie załączonym powyżej (zegar stoi ale po wejsciu na strone pokazuje aktualny czas pociagniety przy renderze strony):
@EDIT Już sobie poradziłem. W ten sposób:
|
|
|
23.05.2020, 22:51:40
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 844 Pomógł: 227 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Testowałeś przypadek gdy użytkownik będzie korzystał dłużej niż 1 minuta, 10 minut czy też godzina?
Może też będzie robił się rozstrzał. Zależy kogo i na jak długo się spodziewasz na stronie. Bo może regularnie warto odświeżać datatime z serwerem. |
|
|
18.09.2020, 13:32:34
Post
#18
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
testowalem 5 i 7 minut w jedna i w druga strone - ale tutaj bardzo ladnie korygowal czas i po korekcie zawsze jest idealnie z serwerem. Do tej pory każdy test trwał nie wiecej niz 30 min i teraz dziala to poki co idealnie
Bo może regularnie warto odświeżać datatime z serwerem. a jak to zrobić? |
|
|
18.09.2020, 14:42:56
Post
#19
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) |
Najprościej ustalić różnicę między czasem serwera i klienta:
Funkcja getTime() zwróci Ci czas zsynchronizowany z serwerowym, bo zna różnicę między nimi. Na samym setInterval() czy tam setTimeout() nie można polegać, bo nie ma gwarancji, że rzeczywiście wykona się po ustalonym czasie. Ja używam takiego sposobu jak powyżej, a jeśli chcę do tego wyświetlać np. zegar w czasie rzeczywistym, to korzystam z takiej funkcji wewnątrz właśnie setInterval(). W tym przypadku już ewentualne rozbieżności czasowe dla setInterval() nas nie interesują, bo nawet gdy wykona się zbyt późno lub zbyt wcześnie, to zwrócony czas i tak jest prawidłowy. Jedyną zagwozdką jest wtedy, na ile ustawić licznik setInterval(). Ja ustawiałem na 1000 (co sekundę), bo aż tak mnie nie obchodziły ewentualne zgrzyty w postaci np. pokazywaniu tej samej wartości zegara przez dwa cykle (dwie sekundy) lub skoki o dwie sekundy w jednym cyklu. Ale jeśli zegar musi być bardzo realistyczny, to warto rozważyć mniejszą wartość w setInterval(), może nawet 100 milisekund. |
|
|
18.09.2020, 15:00:03
Post
#20
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) |
|
|
|
Wersja Lo-Fi | Aktualny czas: 13.06.2024 - 03:52 |