Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak sprawdzić czy data jest większa
Forum PHP.pl > Forum > Przedszkole
miras
Witam, mam następujący problem, jak sprawdzić, czy $data1 jest większa o 3 godziny od $data2 ?

np.


$d="2012-07-02 13:47";

$d1="2012-07-02 10:47";

jak to wykonać?

Dzięki z góry.
Crozin
1. DateTime
2. DateTime::modify
3. PHP ma przeciążone operatory porównania dla obiektów DateTime, więc ostatecznie wystarczy $date1 < $date2.
emkej
Mozna np. przy uzyciu tego: http://www.php.net/manual/pl/datetime.diff.php
miras
no tak, ale ja potrzebuję sprzwdzić czy jest większe minimalnie o 3 godziny więc muszę jakoś dodać te godziny do którejś z dat albo już nie wiem..
AdIoS_Neo
Witam,
masz tu prosty przykładzik
  1. $d = new DateTime("2012-07-02 13:47");
  2. echo $d -> format("Y-m-d H:i") . "<br/>";
  3.  
  4. $d1 = new DateTime("2012-07-02 10:47");
  5. echo $d1 -> format("Y-m-d H:i") . "<br/>";
  6.  
  7. $d1 -> modify("+3 hours");
  8. echo $d1 -> format("Y-m-d H:i") . "<br/>";
  9.  
  10. if($d1 <= $d)
  11. echo "d1 <= d - true";
miras
coś jest nie tak, bo przy takim kodzie:


  1.  
  2. $d = $_POST['start'];
  3. $d1 = $_POST['start'];
  4. $d1 -> modify("+2 hours");
  5. $d1 -> format("Y-m-d H:i");
  6.  
  7. if($d1 <= $d) {
  8.  
  9. $so="ok";
  10.  
  11.  
  12. }
  13.  


mam błąd:


Fatal error: Call to a member function modify() on a non-object in /home/aronzuk/public_html/kosz/new_sz/aplications/dodaj_zlecenie.php on line 304
peter13135
modify to metoda, którą wykonujesz na obiekcie dateTime, a nie na stringu :/
miras
Kompletnie nie rozumiem twojej wypowiedzi..
peter13135
Fakt. Miałem pare błędów językowych. Poprawione.
miras
ehh, szanuje Cię pod względem Twojej wiedzy, ale jestem pewien, że w wielu rzeczach jesteś daleko za mną - życzę Ci tego, abyś potrzebował od kogoś pomocy i żeby ten ktoś popisywał się przed Tobą właśnie tak jak Ty pajacujesz teraz.
peter13135
Pokazałeś kod i błąd, a ja podałem przyczynę błędu wskazałem Ci jak poprawnie ten problem rozwiązać. Czego więcej się spodziewasz ?
Jak ma wyglądać poprawny kod masz podane w linku który podał Crozin. Zainteresowałeś się nim chociaż ?
Uwierz mi, że nie moja wiedza i umiejętności programistyczne nie są nawet średnie i mam wiele ciekawszych rzeczy do roboty niż "pajacowanie".
Poświęciłem parenaście sekund na przeczytanie tematu i udzielenie odpowiedzi. Nawet jeśli moja odpowiedź okazała się dla Ciebie bezużyteczna, to możesz to oznajmić w bardziej grzeczny sposób.
Być może powinienem olać ten temat, pomysleć, że masz gorszy dzień czy coś. No cóż, jeszcze się tego nie nauczyłem.
miras
no ok, zrobiłem to w ten sposób i gdy do $_POST['start'] podam wartość: 2012-07-10 23:32 to nie ma żadnych błędów ale z tego zapytania: if ($d1 >= $datkarl) wywala false...

  1. $datkarl=date("Y-m-d H:i");
  2. $datkarl=date_create($datkarl);
  3.  
  4. $datka=$_POST['start'];
  5. $d = date_create($datka);
  6. $d1 = date_modify($d, '+2 hours');
  7.  
  8. if ($d1 >= $datkarl) {
  9.  
  10. $so="ok";
  11.  
  12.  
  13. }
PtasiorZz
  1. $datkarl=new DateTime( date("Y-m-d H:i") );
  2.  
  3. $d = new DateTime( "2012-07-10 23:32" );
  4. $d -> modify( '+2 hours' );
  5.  
  6. if ( $d >= $datkarl ) {
  7. echo "ok";
  8. }


Teoretycznie date_create to alias konstruktora klasy DateTime, aczkolwiek w Twoim przykładzie go nie zwraca. Spróbuj tego powyżej, działa.
thek
A może powodem jest sam php? DateTime weszło od wersji 5.2 i jeśli ma niższą - nie zadziała. Wtedy pozostanie mu korzystanie z strtotime.
miras
Cytat(PtasiorZz @ 3.07.2012, 05:35:53 ) *
  1. $datkarl=new DateTime( date("Y-m-d H:i") );
  2.  
  3. $d = new DateTime( "2012-07-10 23:32" );
  4. $d -> modify( '+2 hours' );
  5.  
  6. if ( $d >= $datkarl ) {
  7. echo "ok";
  8. }


Teoretycznie date_create to alias konstruktora klasy DateTime, aczkolwiek w Twoim przykładzie go nie zwraca. Spróbuj tego powyżej, działa.



No dobrze, ale przecież ja potrzebuję wstawić tutaj $d= new DataTime($_POST['start']); a jak tak wstawie to dostaje false z $d >=$datkarl i w przeciwnym wypadku tak samo, wiec coś jest nie tak..

  1. $datkarl=date("Y-m-d H:i");
  2.  
  3. $d = strtotime($_POST['start']);
  4. $d = strtotime($d, '+2 hours');
  5.  



to tak samo, zero efektu, po prostu już nie mam ani siły ani zielonego pojęcia jak to rozwiązać..
mls
Cytat(miras @ 2.07.2012, 13:58:13 ) *
Witam, mam następujący problem, jak sprawdzić, czy $data1 jest większa o 3 godziny od $data2 ?


  1. $data1 = strtotime("2012-07-02 13:47:00");
  2. $data2 = strtotime("2012-07-02 10:47:00");
  3.  
  4. if ($data1 > ($data2 + 10800))
  5. {
  6. // większa o 3 godziny
  7. }
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.