Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Funcja date dodaje godzinę za dużo
Forum PHP.pl > Forum > Przedszkole
jam09
Mam skrypt budowania budynków. I wszystko działa dobrze oprócz jednej rzeczy związanej z funkcją date. W "Pozostało" wyświetla datę o godzinę za dużo. I się już długo zastanawiam i nie mogę nic wymyślić.
  1. <?php
  2. $mysql2 = mysql_query("SELECT * FROM kolejkab WHERE id_wioski = $dane1[id] ORDER BY koniec");
  3. $mysql3 = mysql_query("SELECT koniec FROM kolejkab WHERE id_wioski = $dane1[id] ORDER BY koniec DESC LIMIT 1");
  4. $kiedy = date('j',$teraz);
  5. echo'<table>
  6. <tr>
  7. <th>Budynek</th>
  8. <th>Pozostało</th>
  9. <th>Kiedy będzie</th>
  10. <th>Przewij(w budowie)</th>
  11. </tr>';
  12. while($budowane = mysql_fetch_array($mysql2)){
  13. $kiedy1 = date('j',$budowane['koniec']);
  14. echo '<tr><td>';
  15. echo $budowane['buduje'];
  16. echo '</td><td>';
  17. if ($budowane['poczatek'] < $teraz){
  18. echo date('H:i:s',$budowane['koniec'] - $teraz);
  19. echo '</td><td>';
  20. }else{
  21. echo date('H:i:s',$budowane['koniec'] - $budowane['poczatek']);
  22. echo '</td><td>';
  23. }
  24. if ($kiedy == $kiedy1){
  25. echo "Dziś o ";
  26. }else{
  27. $kiedy11 = $kiedy + 1;
  28. if ($kiedy11 == $kiedy1){
  29. echo "Jutro o ";
  30. }else{
  31. echo "Dnia $kiedy1 o ";
  32. }
  33. }
  34. echo date('G:i',$budowane['koniec']);
  35. echo '</td></tr>';
  36. }
  37.  
  38. $dobudowania = $_GET['dobudowania'];
  39. if ($dobudowania == 1){
  40. $nowedrewno = $dane1[drewno] - 2000;
  41. $nowaglina = $dane1[glina] - 2500;
  42. if ($nowedrewno < 0 OR $nowaglina < 0){
  43. echo "Niestety nie masz tyle surowców";
  44. }else{
  45. mysql_query("UPDATE miasta SET drewno=$nowedrewno, glina=$nowaglina WHERE id=$dane1[id]");
  46. $ostatniczas = mysql_fetch_array($mysql3);
  47. if($ostatniczas['koniec'] == 0){
  48. $koniec = $teraz + 60;
  49. mysql_query("INSERT INTO kolejkab (id_wioski, poczatek, koniec, buduje) VALUES ('$dane1[id]', '$teraz', '$koniec', 'kopalniagliny')");
  50. }else{
  51. $koniec1 = $ostatniczas['koniec'] + 60;
  52. mysql_query("INSERT INTO kolejkab (id_wioski, poczatek, koniec, buduje) VALUES ('$dane1[id]', '$ostatniczas[koniec]', '$koniec1', 'kopalniagliny')");
  53. }
  54.  
  55. header('Location: game.php?action=ratusz');
  56. }
  57. }
  58.  
  59. ?>

Dziękuję za pomoc oczywiście będzie "pomógł".
vokiel
Na początek ustaw gdzie jesteś:
  1. $arrLocales = array('pl_PL', 'pl','Polish_Poland.28592');
  2. setlocale( LC_ALL, $arrLocales );
  3. date_default_timezone_set('Europe/Warsaw');


A teraz, jak używasz date z podaniem parametru jako string, to go ze stringa zrób do timestampa.
  1. $kiedy1 = date('j',strtotime($budowane['koniec']));
jam09
Dodałem pierwszy skrypt ale on nic nie zmienia ale dla pewności go zostawię. Został on dodany przed time(). Zapomniałem o tym wspomnieć , że $teraz to funkcja time() znajduje się w piku wywołującym ten skrypt. Drugi skrypt psuje całą sprawę , bo w "Kiedy będzie" są błędy , a bez jego dodania wszystko jest ok.
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.