Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] odliczanie godzin, pobieranie danych z mysql
Forum PHP.pl > Forum > Po stronie przeglądarki
Lejto
Mam problem z odliczaniem godzin od określonej daty z mysql. Dane pobiera normalnie, ale wynik jest zły. Np.
mam taki kod:
  1. <script type="text/javascript">
  2. function liczCzas()
  3. {
  4. now = new Date();
  5.  
  6. rok = 2012;
  7. miesiac = 02;
  8. dzien = 13;
  9.  
  10. godzina = 22;
  11.  
  12.  
  13. to = new Date(rok,miesiac,dzien+2, godzina, 0, 0);
  14.  
  15. ile = to.getTime() - now.getTime();
  16.  
  17.  
  18. godzin = Math.floor(ile / (1000 * 60 * 60));
  19. minut = Math.floor( ile / (1000 * 60)-godzin*60);
  20. sekund = Math.floor(ile / 1000 - godzin*60*60 - minut*60);
  21. document.getElementById("time").innerHTML = " "+godzin+" godzin, "+minut+" minut, "+sekund+" sekund";
  22. }
  23. var animeInt;
  24. clearInterval(animeInt);
  25. animeInt = setInterval("liczCzas()", 1000);
  26. </script>

A wynik dostaje:

741 godzin, 39 minut, 48 sekund


Co tu jest źle?


Pozdrawiam
Kostek.88
Dlatego, że odliczasz od marca, bo z tego co wiem, to 0 jest dla stycznia, 1 dla lutego itd. W każdym razie sprawdź Firebugiem co masz w zmiennej to i zobaczysz 15 marca:

  1. console.log(to)


PS. Zerkinj tutaj też: http://www.tizag.com/javascriptT/javascriptdate.php
Lejto
ok, poradziłem sobie z tym tylko chce to wywoływać w pętli w php, ale pokazuje mi tylko dla pierwszego rekordu, jak to rozwiązać?

mam coś takiego, ale wyświetla tylko dla pierwszego rekordu
  1. <?
  2. $sql = $db->query('select * from report where is_active = 1');
  3. while($row = $sql->fetch_array())
  4. {
  5. $x = explode('.', $row[date]);
  6.  
  7. $y = explode(" ",$x[2]);
  8.  
  9. $z = explode(":",$y[1]);
  10.  
  11. $rok = $y[0];
  12. $miesiac = $x[1];
  13. $dzien = $x[0];
  14. $godzina =$z[0];
  15.  
  16.  
  17. ?>
  18. <script type="text/javascript">
  19. function liczCzas()
  20. {
  21. now = new Date();
  22.  
  23. rok = '2012';
  24. miesiac = <?=$miesiac;?>-1;
  25. dzien = <?=$dzien;?>;
  26.  
  27. godzina = <?=$godzina;?>+9;
  28.  
  29. <?
  30. $li = $dzien+$row[day];
  31. ?>
  32.  
  33.  
  34. to = new Date(rok,miesiac,<?=$li;?>, 0, 0, 0);
  35.  
  36. ile = to.getTime() - now.getTime();
  37.  
  38.  
  39. godzin = Math.floor(ile / (1000 * 60 * 60));
  40. minut = Math.floor( ile / (1000 * 60)-godzin*60);
  41. sekund = Math.floor(ile / 1000 - godzin*60*60 - minut*60);
  42. godzin = Math.floor(ile / (1000 * 60 * 60))+9;
  43.  
  44. document.getElementById("time").innerHTML = " "+godzin+" godzin, "+minut+" minut, "+sekund+" sekund";
  45. }
  46. var animeInt;
  47. clearInterval(animeInt);
  48. animeInt = setInterval("liczCzas()", 1000);
  49. </script>
  50. <tr>
  51.  
  52. <td><?=$row[name];?></td>
  53. <td><?=$row[surname];?></td>
  54. <td><?=$row[adress];?></td>
  55. <td><?=$row[phone];?></td>
  56. <td><?=$row[cases];?></td>
  57. <td><div id="time"></div></td>
  58. <td><a href="?action=zamykam&id=<?=$row[id_zgloszenia ];?>" class="myButton">Zamykam</a></td>
  59.  
  60.  
  61. </tr>
  62. <?
  63. }
  64. ?>
  65.  
  66.  
  67.  
  68.  
  69. </table>
Kostek.88
1) W phpMyAdmin w okienku SQL zrób zapytanie "select * from report where is_active = 1" i daj tutaj wynik

2) Co to znaczy, że wyświetla tylko dla 1. rekordu? Wyświetla tylko pierwszy wiersz tabeli, czy wyświetla całą tabelę, ale tylko w 1. rekordzie wyniki? A może w każdym rekordzie wyświetlają się wyniki z pierwszego (powtarza się)?

3) Zauważ, że kilka razy definiujesz funkcję liczCzas(), po prostu masz ją w pętli. Generalnie taka sytuacja nie może mieć miejsca, dlatego powinieneś raczej zrobić pętlę while wewnątrz tej funkcji i wyniki przypisać np. do tablicy w JS (http://www.w3schools.com/js/js_obj_array.asp oraz http://www.w3schools.com/jsref/jsref_push.asp). Ale ja bym zrobił jeszcze inaczej: na samej górze skryptu zrobił cały SQL i przypisał wyniki do tablicy w JS, a potem przebudował tak funkcję, żeby dać jej całą tablicę jako argument, po czym dał tę gotową tablicę i wywołał funkcję. Resztę może zrobić JS. Zrób jak Ci to bardziej pasuje.
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.