Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][JavaScript][PHP]Odliczanie czasu do zdarzenia
ChaYim
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ChaYim
post
Post #2





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 24.11.2015

Ostrzeżenie: (0%)
-----


Witam ponownie (IMG:style_emoticons/default/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 :/

Ten post edytował ChaYim 26.03.2019, 11:18:55
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 04:11