Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [SQL][JavaScript][PHP]Odliczanie czasu do zdarzenia

Napisany przez: ChaYim 22.02.2019, 21:09:04

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.

Napisany przez: miccom 24.02.2019, 22:42:16

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

Napisany przez: ChaYim 27.02.2019, 21:38:01

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.

Napisany przez: dublinka 28.02.2019, 14:20:17

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

Napisany przez: ChaYim 26.03.2019, 08:35:29

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 http://www.php.net/die('Błąd zapytania: 1');
  2. $info_o_user = mysqli_fetch_assoc($info_o_user);
  3.  
  4. $czas_zakonczenia = http://www.php.net/strtotime($info_o_user['miss_time']);
  5. $y = http://www.php.net/date('Y', $czas_zakonczenia);
  6. $m = http://www.php.net/date('m', $czas_zakonczenia)-1;
  7. $reszta_daty = http://www.php.net/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 :/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)