Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odliczanie czasu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Mati-21
Witam

Mam skrypt JS, który odlicza mi 1h.
  1. $time = time();
  2. $countdown = $time + 3600;
  3.  
  4. echo '<strong id="countdown_1"></strong>';
  5.  
  6. <script type="text/javascript">
  7. function countdown(targetDate, displayElement, onCountdownFinish) {
  8. if (!(targetDate && displayElement)) {
  9. return;
  10. }
  11. var formatTimeInterval = function(seconds) {
  12. var hrs = Math.floor(seconds / 3600)
  13. var min = Math.floor(seconds / 60) % 60;
  14. var sec = seconds % 60;
  15. return (hrs + ":" + min + ":" + sec).replace(/(^|:)(\d)(?=:|$)/g, "$10$2");
  16. };
  17. var refreshTimer = function() {
  18. var now = new Date();
  19. var diffMilliseconds = targetDate.getTime() - now.getTime();
  20. var diffSeconds = Math.round(diffMilliseconds / 1000);
  21. if (diffSeconds < 0) {
  22. diffSeconds = 0;
  23. }
  24. var countdownHTML = formatTimeInterval(diffSeconds)
  25. if (countdownHTML != displayElement.innerHTML) {
  26. displayElement.innerHTML = countdownHTML;
  27. }
  28. if (diffSeconds === 0) {
  29. clearInterval(intervalId);
  30. if (typeof onCountdownFinish === "function") {
  31. onCountdownFinish(targetDate);
  32. }
  33. }
  34. };
  35. var intervalId = setInterval(refreshTimer, 250);
  36. refreshTimer();
  37. }
  38.  
  39. (function() {
  40. var now = new Date();
  41. countdown(new Date(' . ($countdown) * 1000 . '), document.getElementById("countdown_1"));
  42. })();
  43. </script>';

Problem polega na tym, że nie zaczyna liczyć o 01:00:00.
Początkowo odliczał o 01:02:38 teraz od 01:03:51.
W ogóle nie znam się na pisaniu w JS dlatego zwracam się do Was czy możecie mi powiedzieć co jest źle w kodzie, że tak się dzieje?
Kshyhoo
Coś masz skopane u siebie, bo u mnie działa dobrze. Może gryzie się z innymi skryptami JS.
Mati-21
Na podstronie mam tylko ten kod i nadal odlicza od 01:03:52. Czy może to być wina serwera?

Edit: Przed chwilą sprawdziłem kod na localhost-cie i tutaj działa prawidłowo :-/
Kshyhoo
Cytat(Mati-21 @ 30.03.2012, 13:01:23 ) *
Na podstronie mam tylko ten kod i nadal odlicza od 01:03:52. Czy może to być wina serwera?

Najwidoczniej, nie możemy tego potwierdzić, bo nie wiemy, gdzie masz serwer. Sprawdź, czy nie gryzie się z innym kodem.
Mati-21
Zrobiłem test kodu na 5 serwerach.

localhost (WebSerwer) - odlicza prawidłowo

cal.pl (serwer główny) - 01:03:53

cba.pl - 01:01:03
webserwer.pl - 01:01:05
prv.pl - 01:01:03

Na podstronie jest tylko kod podany w 1 poście.
Kshyhoo
Może dodaje jeszcze różnicę między czasem Twojego localhosta a serwera zewnętrznego wink.gif
Mati-21
No właśnie też o tym pomyślałem ale początkowo na moim serwerze różnica czasu wynosiła 2:38 a teraz jest 3:51. Sprawdzałem to również na innym komputerze to ten czasy był jeszcze inny. Jakby był stały to wystarczyła by prosta korekta po przez odejmowanie nadmiarowego czasu.

Edit: A może problem polega na tym, że obiekt date() pobiera date jaka jest ustawiona w systemie a nie czas jaki jest na serwerze?

Edit 2: Problem rozwiązany :-D

Oto kod poprawionego skryptu jakby ktoś inny potrzebował:
  1. $time = time();
  2. $countdown = $time + 3600;
  3.  
  4. echo '<strong id="countdown_1"></strong>';
  5.  
  6. <script type="text/javascript">
  7. var roz = new Date().getTime()-(' . date('U') * 1000 . ');
  8. function countdown(targetDate, displayElement, onCountdownFinish) {
  9. if (!(targetDate && displayElement)) {
  10. return;
  11. }
  12. var formatTimeInterval = function(seconds) {
  13. var hrs = Math.floor(seconds / 3600)
  14. var min = Math.floor(seconds / 60) % 60;
  15. var sec = seconds % 60;
  16. return (hrs + ":" + min + ":" + sec).replace(/(^|:)(\d)(?=:|$)/g, "$10$2");
  17. };
  18. var refreshTimer = function() {
  19. var now = new Date();
  20. now.setTime(now.getTime()-roz);
  21. var diffMilliseconds = targetDate.getTime() - now.getTime();
  22. var diffSeconds = Math.round(diffMilliseconds / 1000);
  23. if (diffSeconds < 0) {
  24. diffSeconds = 0;
  25. }
  26. var countdownHTML = formatTimeInterval(diffSeconds)
  27. if (countdownHTML != displayElement.innerHTML) {
  28. displayElement.innerHTML = countdownHTML;
  29. }
  30. if (diffSeconds === 0) {
  31. clearInterval(intervalId);
  32. if (typeof onCountdownFinish === "function") {
  33. onCountdownFinish(targetDate);
  34. }
  35. }
  36. };
  37. var intervalId = setInterval(refreshTimer, 250);
  38. refreshTimer();
  39. }
  40.  
  41. (function() {
  42. var now = new Date();
  43. now.setTime(now.getTime()-roz);
  44.  
  45. countdown(new Date(' . ($countdown) * 1000 . '), document.getElementById("countdown_1"));
  46. })();
  47. </script>';
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.