Po zapoznaniu się z dokumentacją PHP DateTime
wydaje się , że dwie następujące metody obiektu rozwiązałyby mój problem:
- DateTime :: diff : Pobierz różnicę i użyj jej, aby określić, która jest bardziej stara.
- DateTime :: getTimestamp : Pobierz znacznik czasu UNIX i porównaj je.
Obie te metody są oznaczone w doco jako dostępne w wersji> = 5.3 (i, co nie jest zaskoczeniem, jeśli spróbuję je wywołać, stwierdzę, że nie istnieją). Nie mogę znaleźć żadnej konkretnej dokumentacji dla 5.2.8, więc nie jestem pewien, czy w mojej wersji istnieją równoważne metody. I Googled problem i znaleźć eklektyczny gamę rozwiązań, z których żadna nie jest odpowiedź na moje bardzo proste wymagania:
- Jak porównać dwa obiekty DateTime?
- Gdzie mogę znaleźć dokumentację dla poprzednich wersji PHP? W szczególności wersja 5.2.8?
W pewnym kontekście mam następujący kod:
$st_dt = new DateTime(verifyParam ('start_date'));
$end_dt = new DateTime(verifyParam ('end_date'));
// is the end date more ancient than the start date?
if ($end_dt < $start_dt)
Najwyraźniej ten facet nie ma operatora porównania.
Edytować
Najwyraźniej moje założenia były całkowicie fałszywe (dziękuję Milenowi za tak skuteczne zilustrowanie tego). Jest operator porównania i działa dobrze dzięki. Czasami naprawdę brakuje mi kompilatora. Błąd znajduje się w powyższym kodzie, jestem pewien, że znajdziesz go znacznie szybciej niż ja :).
$_POST
, w przeciwnym razie kotek zostanie zabity.Odpowiedzi:
Poniższe wydaje się potwierdzać, że istnieją operatory porównania dla klasy DateTime:
źródło
DateTime
sekundy z tą samą datą nie będą porównywane jako równe, jeśli uważasz, że powinny. Można temu zaradzić poprzez jawne ustawienie składników czasu obiektu na zero przed ich porównaniem.Z oficjalnej dokumentacji :
Dla wersji PHP wcześniejszych niż 5.2.2 (właściwie dla każdej wersji) możesz użyć diff .
źródło
Możesz także porównać epokowe sekundy:
Źródło: http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (dość interesujący artykuł o DateTime)
źródło
format
tworzy ciąg , więc to porównanie ciągów. Po epoce 1000000000 to prawie problem (mniej więcej 9 września 2001 r.), Ale jeśli masz do czynienia z datami wcześniej , możesz mieć problemy z powodu różnych długości liczb. Albo przekonwertuj wyniki na liczby (odejmowanie ich też działa), albo użyj prawdziwie sortowalnego formatu, takiego jakc
.Jeśli chcesz porównać daty, a nie godzinę, możesz użyć tego:
źródło
$d1->setTime(0, 0, 0);
Począwszy od wersji PHP 7.x, możesz używać następujących opcji:
źródło
źródło
To może ci pomóc.
źródło
$today = new DateTime("now");
$time = DateTime::createFromFormat('d-m-Y',"26-October-1998");
if ($today > $time){echo "today is greater";}else{echo "other time is greater";}
jasne , na zdrowie.