Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z porównaniem dat
Forum PHP.pl > Forum > Przedszkole
djmassive
witam

Jestem nowy, mam nadzieje, że pomozecie mi rozwikłać problem nad którym siedzę już drugi dzień exclamation.gif

Napisałem taki prosty skrypt, który zapisuje do bazy danych z formularza różne informcje wraz z podanymi datami. Potrzebuje zrobić skrypt, w którym będę mógł wypisać wszystkie informacje których data jest większa od aktualnej; takie których data jest równa aktualnej; oraz takie, których data jest mniejsza od aktualnej.

Próbowałem na wiele sposobów, obecny skrypt zrobiłem na zasadzie oddzielnych liczb dni, miesięcy oraz rok.

w bazie mysql wyglądało by to tak:

ID | NAZWA | DZIEN | MIES | ROK | KOMMENTARZ
-----------------------------------------------------------

przyczym ja zastosowałem zmienne $datadn - dzień; $datams - miesiąc; $datarok - rok;

Oto skrypt:

  1. <?
  2.  include('adminconfig.php');
  3.  
  4.  $db=mysql_connect($dbhost,$dbuser,$dbpass);
  5. mysql_select_db($dbname);
  6.  
  7.  $dane2="SELECT * FROM booking_nowe order by id";
  8.  $wynik2=mysql_query($dane2);
  9.  
  10.  $tdn=date('d');
  11.  $tms=date('m');
  12.  $trok=date('Y');
  13.  
  14. while($wiersz2=mysql_fetch_array($wynik2)) {
  15.  
  16.  
  17. if (($tdn == $wiersz2['datadn']) && ($tms == $wiersz2['datams']) && ($trok == $wiersz2['datarok']))  {
  18.  
  19. echo "</br>Jest dzisiaj tj. dnia </br>";
  20. echo $wiersz2['datadn'].".".$wiersz2['datams'].".".$wiersz2['datarok']."</br>";
  21.  
  22.  }
  23.  
  24.  
  25.  elseif (($tdn >= $wiersz2['datadn']) && ($tms >= $wiersz2['datams']) && ($trok >= $wiersz2['datarok'])){
  26.  echo "</br>Już się odbył dnia </br>";
  27.  echo $wiersz2['datadn'].".".$wiersz2['datams'].".".$wiersz2['datarok']."</br>"; }
  28.  
  29.  
  30.  if (($tdn <= $wiersz2['datadn']) && ($tms <= $wiersz2['datams']) && ($trok <= $wiersz2['datarok']))  {
  31.  echo "</br>Się odbędzie dnia </br>";
  32.  echo $wiersz2['datadn'].".".$wiersz2['datams'].".".$wiersz2['datarok']."</br>";
  33.  }
  34.  
  35. } ?>


no mniejwięcej tak to napisałem. Wiem, że date łatwo można obliczyć poprzez zmiane jej na UNIXowy format poleceniem mktime(); lub time(); jednak dużo próbowałem, i nie mogłem nic wymodzić. Przykład:

  1. <?
  2.  
  3. include('dane.inc'); // Pobieram zmienne
  4.  
  5. $aktualnadata=mktime(); // Pobieram aktualną datę w formacie UNIX
  6.  
  7. $db=mysql_connect($host,$user,$pass);
  8. $mysql_select_db("wydarzenia");
  9.  
  10. $dane="SELECT * FROM wydarzenia";
  11. $wykonane=mysql_query($dane);
  12.  
  13. while($wiersz=mysql_fetch_array($wyn)) {  // Pobieram dane z bazy
  14.  
  15. $test=$wiersz['data']; 
  16. $databazy=mktime(0,0,0,$test); // Powinno konwertować date formatu 
  17.  // DN.MS.ROK do formatu UNIX'a
  18.  
  19. if ($aktualnadata>$databazy) { echo "</br>Dawno już mineło".$wiersz['nazwa']; }
  20. if ($aktualnadata<$databazy) { echo "</br>Dopiero będzie".$wiersz['nazwa']; }
  21. if ($aktualnadata==$databazy) { echo "</br>Dziś jest ten dzień".$wiersz['nazwa']; }
  22.  
  23. }
  24.  
  25.  
  26. ?>


Tak to mniej więcej wyglądało. Kto pomorze questionmark.gif
treewood
moze troszke nie na temat. z tego co wiem to powinno sie stosowac <br /> a nie <br> czy </br>. chyba, ze to jakis format zastepczy?
djmassive
Cytat(treewood @ 2005-09-13 18:52:35)
moze troszke nie na temat. z tego co wiem to powinno sie stosowac <br /> a nie <br> czy </br>. chyba, ze to jakis format zastepczy?

No ja zawsze używałem </br> (przejście do następnej lini) - działa zarówno na mozilli jak i na IE. A kto dopomoże ze skryptem ?
Spirit86
nie łatwiej użyć strtotime" title="Zobacz w manualu php" target="_manual]?
Pobieasz teraźniejszy time" title="Zobacz w manualu php" target="_manual, po czym w pętli wypisującej dane z SQL porównujesz smile.gif

Albo jeszcze łatwiej zmień typ
DZIEN | MIES | ROK
na
CZAS (time)
eS...
hmm, a może w samym zapytaniu sprobuj??
tu wszystko masz opisane
http://dev.mysql.com/doc/mysql/en/date-and...-functions.html
djmassive
Jeżeli to nie sprawi wam problemu, możecie napisać mi kod w php questionmark.gif
nospor
Cytat
nad którym siedzę już drugi dzień exclamation.gif
Miałem kiedyś kolegę, z którym pisałem pewien projekt. Miał on napisać pewną rzecz. Po dwóch tygodniach pokazuje swoje wypociny. Co tu duzo gadać. Nie wysilił się. Twardo jednak mówił iż siedział na tym 2 tygodnie. Ja się go pytam ile czasu spedzal przez te 2 tygodnie nad tym projektem. On mi na to że spedzil nad tym dwa weekendy, a konkretnie dwie soboty, a konkretnie 2 godziny każdej soboty. I wten sposób z dwóch tygodni zrobiłi się 4 godziny.
Przepraszam za tę dygresję, ale jak widzę taki teksty jak Twój to mnie takie coś nachodzi.

Wracając do tematu:
Ale poco se żecie komplikujesz? A nie możesz w tabeli zamiast tych trzech pól dzien, miesiąc, rok dać jednego pola "data" typu timestamp? Wówczas kod jest banalny:
  1. <?php
  2.  
  3. $aktualnadata=date('Y-m-d');
  4. $db=mysql_connect($host,$user,$pass);
  5. $mysql_select_db("wydarzenia");
  6. $dane="SELECT * FROM wydarzenia";
  7. $wykonane=mysql_query($dane);
  8. while($wiersz=mysql_fetch_array($wyn)) {   // Pobieram dane z bazy
  9.  
  10. $databazy=date('Y-m-d',$wiersz['data']); 
  11.  
  12. if ($aktualnadata>$databazy) { echo "</br>Dawno już mineło".$wiersz['nazwa']; }
  13. if ($aktualnadata<$databazy) { echo "</br>Dopiero będzie".$wiersz['nazwa']; }
  14. if ($aktualnadata==$databazy) { echo "</br>Dziś jest ten dzień".$wiersz['nazwa']; }
  15.  
  16. }
  17. ?>
i już.

zamiast timestamp może wogóle byc format "date" (Y-m-d). Nie trzeba wowczas w php konwersji robic.
djmassive
Jestem początkujący, większość skryptów robie z książką, 2 dni znaczą 2 dni , z wyłączeniem spania smile.gif coś koło 7 godzin, no i przerwami na toalete i jedzenie. Z tą datą się poddałem i dlatego napisałem do was. Ok, to ja ide stestować ten sposób.

EDIT: withstupidsmiley.gif Dzięki smile.gif Działa biggrin.gif:D:D Da się jakieś punkty dawać questionmark.gif tongue.gif
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.