Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][JavaScript][PHP]Odliczanie czasu do zdarzenia
Forum PHP.pl > Forum > Przedszkole
ChaYim
Witam.
Potrzebuję zrobić skrypt, który zadziała w następujący sposób:
1. Użytkownik wybiera interesującą go opcję (klika link/button)
2. Wyświetla się czas potrzebny do wykonania tego zadania.
3. Po upływie tego czasu, jeśli odświeży stronę (a może zrobię to z AJAXem, nie wiem jeszcze smile.gif ) dostanie stosowny komunikat.

Pomyślałem, że najlepiej zrobić to na zasadzie zapisu do bazy zaraz po kliknięciu w opcję, czyli użytkownik klika w button i generuje się komunikat, który wyświetli mu się po upływie konkretnego czasu. Czy jest na to jakiś inny, lepszy sposób? Wydaje mi się, że do stworzenia komunikatu dopiero po upływie czasu potrzebny będzie cron - a to przy kilku setkach użytkowników mija się z celem.
miccom
Zrób jak mówisz, dodaj licznik czasowy odliczający sekundy do "zera", i przy wyzerowaniu wykonujesz ajax do sprawdzenia, czy minął wymagany czas- jesli tak: pokazujesz komunikat / jeśli nie- to info że jeszcze nie czas.

Jak klient straci kontakt ze strona ( wyloguje się lub zamknie okno przeglądarki ) to ponownie musisz pobrać czas do końca -> uruchomić w jquery licznik i patrz jak wyżej smile.gif
ChaYim
Czyli tak jak myślałem smile.gif Dzięki za miccom za utwierdzenie.
Zapiszę sobie czas zdarzenia do sesji i będę go porównywał z czasem serwera. Jeżeli czas zdarzenia jest mniejszy bądź równy czasowi serwera to wtedy wywołam funkcję z komunikatem. Przy każdym logowaniu zapis czasu zdarzenia do sesji - nie będzie trzeba robić zapytania do bazy przy każdym odświeżeniu strony, po wywołaniu komunikatu usunięcie zmiennej z czasem zdarzenia smile.gif
Tak dla potomnych, jeśli ktoś będzie kombinował coś podobnego wink.gif

Temat do zamknięcia.
dublinka
Mam takiego gotowca. Dziala na zasadzie: logowanie ustawione na okreslony czas -> w okreslonym div-ie trwa odliczanie do ZERA i potem nastepuje wylogowanie. Wazne zeby sprawdzac na kazdej zestron czas i pozostaly czas z sesji. Smo wylogowanie mozna zastapic informacja etc
ChaYim
Witam ponownie smile.gif
Zabrałem się w końcu za to odliczanie i napotkałem problem :/

Posiadam taką oto funkcję js:

  1. function czasDoWydarzenia(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda)
  2. {
  3. var aktualnyCzas = new Date();
  4. var dataWydarzenia = new Date(rok, miesiac, dzien, godzina, minuta, sekunda, milisekunda);
  5. var pozostalyCzas = dataWydarzenia.getTime() - aktualnyCzas.getTime();
  6.  
  7. if (pozostalyCzas > 0)
  8. {
  9. var s = pozostalyCzas / 1000; // sekundy
  10. var min = s / 60; // minuty
  11. var h = min / 60; // godziny
  12.  
  13. var sLeft = Math.floor(s % 60); // pozostało sekund
  14. var minLeft = Math.floor(min % 60); // pozostało minut
  15. var hLeft = Math.floor(h); // pozostało godzin
  16.  
  17. if (minLeft < 10)
  18. minLeft = "0" + minLeft;
  19. if (sLeft < 10)
  20. sLeft = "0" + sLeft;
  21.  
  22. return hLeft + " : " + minLeft + " : " + sLeft;
  23. }
  24. else
  25. return "Czas minął!";
  26. }
  27.  
  28. window.onload = function()
  29. {
  30. idElement = "czas";
  31. document.getElementById(idElement).innerHTML = czasDoWydarzenia('.$data_zakonczenia.');
  32. setInterval("document.getElementById(idElement).innerHTML = czasDoWydarzenia('.$data_zakonczenia.')", 1000);
  33. };

Upakowałem ją sobie w pliku functions.php i przekazuję do niej zmienną $data_zakonczenia. W właściwym pliku php odwołuję się do funkcji countdown($data_zakonczenia);

Zmienną $data_zakonczenia tworzę w ten sposób:

  1. $info_o_user = mysqli_query($link,"SELECT * FROM users WHERE `id` = '$user_id'") or die('Błąd zapytania: 1');
  2. $info_o_user = mysqli_fetch_assoc($info_o_user);
  3.  
  4. $czas_zakonczenia = strtotime($info_o_user['miss_time']);
  5. $y = date('Y', $czas_zakonczenia);
  6. $m = date('m', $czas_zakonczenia)-1;
  7. $reszta_daty = date('d, h, i, s, u', $czas_zakonczenia);
  8.  
  9. $data_zakonczenia = $y.', '.$m.', '.$reszta_daty;


Gdy robię echo $data_zakonczenia; jest wszystko ok, otrzymuję '2019, 02, 26, 8, 35, 0, 0'. (od miesięcy odejmuję 1 ponieważ JS odlicza miesiące od 0)
Problem zaczyna się przy wyświetleniu odliczania. W elemencie id="czas" zieje pustka :/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.