Jak mogę porównać dwie daty w PHP?
Data jest przechowywana w bazie danych w następującym formacie
2011-10-2
Gdybym chciał porównać dzisiejszą datę z datą w bazie danych, aby zobaczyć, która z nich jest większa, jak mam to zrobić?
Próbowałem tego,
$today = date("Y-m-d");
$expire = $row->expireDate //from db
if($today < $expireDate) { //do something; }
ale tak naprawdę to nie działa. Jaki jest inny sposób na zrobienie tego?
Odpowiedzi:
Zapisz go w formacie RRRR-MM-DD, a wtedy porównanie ciągów zadziała, ponieważ „1”> „0” itd.
źródło
2016-03-27 11:59:47 ::: 2016-03-14 10:30:00
?Jeśli wszystkie twoje daty są późniejsze niż 1 stycznia 1970, możesz użyć czegoś takiego:
Jeśli używasz PHP 5> = 5.2.0, możesz użyć klasy DateTime:
Albo coś w tym stylu.
źródło
1st of January of 1970
dotyczy tylko starszych wersji PHP działających w systemie Windows i nigdy nie była problemem na Uniksie.strtotime
zwróci wartość false dla dłuższych dat. stackoverflow.com/questions/2012589/…DateTime
metoda jest metodą preferowaną. Ten obiekt może zrobić znacznie więcej niżstrtotime
kiedykolwiek.new DateTime('now')
działa również, aby pobrać dzisiejszą datęAby uzupełnić udzielone już odpowiedzi, zobacz następujący przykład:
Aktualizacja: Lub po prostu użyj starej szkoły date () :
źródło
Nie zrobiłbym tego z PHP. Baza danych powinna wiedzieć, jaki dzień jest dzisiaj. (Użyj na przykład MySQL-> NOW ()), więc porównanie w zapytaniu będzie bardzo łatwe i zwrócenie wyniku, bez żadnych problemów, w zależności od użytych typów dat
źródło
źródło
Oto sposób, w jaki sposób uzyskać różnicę między dwiema datami w minutach.
źródło
Możesz konwertować daty na znaczniki czasu UNIX i porównywać różnice między nimi w sekundach.
źródło
Ja też miałem ten problem i rozwiązuję go poprzez:
źródło
Oto moje omówienie, jak uzyskać różnicę w dniach między dwiema datami za pomocą PHP. Zwróć uwagę na użycie znaku „!” w formacie, aby odrzucić część czasową dat, dzięki informacjom z DateTime createFromFormat bez czasu .
źródło
Znalazłem odpowiedź na blogu i jest to tak proste, jak:
I otrzymasz dni między 2 datami.
źródło
Działa to dzięki logice porównywania ciągów PHP. Po prostu możesz sprawdzić ...
Obie daty muszą mieć ten sam format. Cyfry muszą być wypełnione zerami po lewej stronie i uporządkowane od najbardziej znaczących do najmniej znaczących.
Y-m-d
iY-m-d H:i:s
spełniają te warunki.źródło
d-m-Y
nie zadziała ...Y-m-d
(z początkowym zerem jak 2016-05-08) zadziała. Sprawdź te daty wd-m-Y
formacie01-10-2016
i20-02-2016
porównując jako ciągi 0 <2, przestanie porównywać, ale niepoprawnie ...2011-10-2
.Jeśli chcesz, aby data ($ date) wygasła w pewnym przedziale, na przykład data wygaśnięcia tokena podczas resetowania hasła, oto jak możesz to zrobić:
Ale w twoim przypadku możesz wykonać porównanie w następujący sposób:
źródło
requestDate()
metoda - nigdzie o niej nie ma mowy. Nie użyłbym twojej odpowiedzi ani nie poleciłbym badaczowi skorzystania z twojego rozwiązania. Nie przewiduję zmiany mojego głosu.Przede wszystkim spróbuj nadać aktualny format daty i czasu serwera w żądanym formacie:
Uzyskaj aktualną datę i godzinę
$ current_date = getdate ();
Oddzielną datę i godzinę, aby zarządzać nimi według własnego uznania:
$ current_date_only = $ current_date [rok] .'- '. $ current_date [mon] .'-'. $ current_date [mday]; $ current_time_only = $ current_date ['hours']. ':'. $ current_date ['minutes']. ':'. $ current_date ['seconds'];
Porównaj to w zależności od tego, czy używasz daty donly czy datetime w swojej bazie danych:
$ dzisiaj = $ current_date_only. ' '. $ current_time_only;
lub
$ dzisiaj = $ current_date_only;
if ($ dzisiaj <$ expireDate)
mam nadzieję, że to pomoże
źródło