Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP + MySQL] Skrypt zdarzenie.php
Forum PHP.pl > Forum > Przedszkole
henio
Utworzyłem następujący skrypt:
  1. <?php
  2. include("funkcje.php");
  3. include("baza.php");
  4. naglowek("Zdarzenie");
  5.  
  6. $data = date('m-d');
  7. $wynik = mysqli_query($mysql, "SELECT * FROM zdarzenie WHERE substr(data, 6, 5) = '$data'");
  8.  
  9. datapl();
  10. echo "<br /><b>Tego dnia</b>:";
  11. while($wynik && $rekord = mysqli_fetch_assoc($wynik))
  12. {
  13. $data_z_bazy = explode('-', $rekord['data']);
  14. $dataunix = mktime(0, 0, 0, $data_z_bazy['1'], $data_z_bazy['0'], $data_z_bazy['2']);
  15. $dzisiaj = time();
  16. $roznica = $dataunix - $dzisiaj;
  17. $roznica2 = floor($roznica / (365 * 24 * 60 * 60));
  18. if($roznica2 == 1)
  19. {
  20. echo "<br /><b>Rok</b> temu ".$rekord['zdarzenie']."";
  21. echo "<br />".nl2br($rekord['opis_zdarzenie'])."";
  22. }
  23. elseif($roznica2 <=4)
  24. {
  25. echo "<br /><b>".$roznica2."</b> lata temu ".$rekord['zdarzenie']."";
  26. echo "<br />".nl2br($rekord['opis_zdarzenie'])."";
  27. }
  28. else
  29. {
  30. echo "<br /><b>".$roznica2."</b> lat temu ".$rekord['zdarzenie']."";
  31. echo "<br />".nl2br($rekord['opis_zdarzenie'])."";
  32. }
  33. }
  34. ?>

W bazie danych mam zdarzenie, którego data to 2004-07-06.
Powinno mi wyświetlić się:
3 lata temu ...
A wyświetla się:
4 lata temu.

Choć różnica pomiędzy datą 2007-07-06 a datą 2004-07-06 to 3 lata
Stark
Wydaje mi sie, ze blad lezy w sposobie obliczania przez ciebie daty:

  1. <?php
  2. $roznica = $dataunix - $dzisiaj;
  3. ?>


Wykonujesz dzialanie na datach: 2004.07.06 00:00 - 2007.07.06 11:05. Wynikiem tego sa -3 lata i pare godzin, co funkcja floor zaokragla w dol do -4.
uli
Zaokrągla w dół liczbę np. -3.685854, co daje -4 smile.gif

@UP: Stark był szybszy smile.gif
henio
W takim razie co powinienem zmienić, aby było ok i "uniwersalne do każdej godziny"?
uli
Heniu litości...

Liczysz różnicę między dziś, a zdarzeniem w przeszłości...

Zamiast:

  1. <?php
  2. $roznica = $dataunix - $dzisiaj;
  3. ?>


Daj:

  1. <?php
  2. $roznica = $dzisiaj - $dataunix;
  3. ?>
henio
Cytat(uli @ 6.07.2007, 10:04:52 ) *
Heniu litości...

Liczysz różnicę między dziś, a zdarzeniem w przeszłości...

Zamiast:

  1. <?php
  2. $roznica = $dataunix - $dzisiaj;
  3. ?>


Daj:

  1. <?php
  2. $roznica = $dzisiaj - $dataunix;
  3. ?>

Tak już próbowałem wczaśniej, ale wychodzi mi liczba na minusie
uli
A to zadziwiające doprawdy bo nam dwóm wychodzi tak przy Twoim zapisie. Zreszta poprawnie i logicznie, bo od kiedy 2004-2007 daje wynik dodatni biggrin.gif
henio
Cytat(uli @ 6.07.2007, 12:22:14 ) *
A to zadziwiające doprawdy bo nam dwóm wychodzi tak przy Twoim zapisie. Zreszta poprawnie i logicznie, bo od kiedy 2004-2007 daje wynik dodatni biggrin.gif


Nadal nie mam rozwiazania mojego problemu. Sam sie dziwie dlaczego jest źle
uli
  1. <?php
  2. $roznica2 = floor(abs($roznica / (365 * 24 * 60 * 60)));
  3. ?>


Skoro otrzymujesz wartości ujemne to weź wartość bezwzględną.
henio
Cytat(uli @ 6.07.2007, 12:33:20 ) *
  1. <?php
  2. $roznica2 = floor(abs($roznica / (365 * 24 * 60 * 60)));
  3. ?>


Skoro otrzymujesz wartości ujemne to weź wartość bezwzględną.


Dzięki za pomocą. Właśnie przed chwilą rozwiązałem problem. I to nie przez wartość bezwzględną.
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.