Na tym polega piękno tego formatu: ładnie się porządkuje. Oczywiście może to być mniej wydajne, w zależności od konkretnych okoliczności, ale może być także o wiele wygodniejsze i prowadzić do łatwiejszego do utrzymania kodu - musielibyśmy wiedzieć więcej, aby naprawdę wykonać to osąd.
Dla właściwej strefy czasowej możesz użyć na przykład:
date_default_timezone_set('America/New_York');
Kliknij tutaj, aby zapoznać się z dostępnymi strefami czasowymi PHP.
@anushr, jeśli strefa czasowa jest potrzebna do porównania, różnicę czasu można dodać do daty przed porównaniem. Jest to nadal szybsze niż próba konwersji dwóch ciągów mm/dd/yyyydaty i czasu w formacie do daty, a następnie ich porównanie. Zawsze martwię się, gdy programiści mają daty w wielu strefach czasowych w swoim systemie. Myślę, że lepiej jest przechowywać daty w systemie, zawsze w jednej strefie czasowej, a następnie wyświetlać je w dowolnej strefie czasowej. Zacząłem używać yyyy-mm-ddformatu (lub yyyymmdd) około 1998 roku, kiedy zdałem sobie sprawę, że sortuje on znacznie szybciej, nawet na serwerze SQL.
AaA
59
Proszę bardzo:
function isToday($time)// midnight second{return(strtotime($time)=== strtotime('today'));}
isToday('2010-01-22 00:00:00.0');// true
Ponadto kilka dodatkowych funkcji pomocniczych:
function isPast($time){return(strtotime($time)< time());}function isFuture($time){return(strtotime($time)> time());}
Dlaczego dziwna logika wsteczna i obce booleany? Dlaczego nie tylko „return strtotime ($ time) == strtotime ('Today')”, „return strtotime ($ time)> time ()” i „return strtotime ($ time) <time ()”?
Bobby Jack
@Bobby Jack: Miałem więcej funkcji w tych funkcjach, zapomniałem usunąć dodatkowy kod. Naprawiono teraz.
Alix Axel
+1 na funkcji pomocnika, konkretnie to Past b / c Właśnie uruchomiłem a if(strtotime('2013-01-22 00:00:00.00') < time()){....}i to zrobiło to dla mnie.
MDMoore313
47
Aby ukończyć BoBby Jack, użyj DateTime OBject, jeśli masz php 5.2.2+:
if(newDateTime()>newDateTime($var)){// $var is before today so use it}
To nie jest poprawne. Jeśli $ var jest bieżącym dniem (po dokładnej północy), nowy DateTime () będzie większy niż nowy DateTime ($ var) i to nieprawda, że $ var jest przed dniem dzisiejszym.
$toBeComparedDate ='2014-08-12';
$today =(newDateTime())->format('Y-m-d');//use format whatever you are using
$expiry =(newDateTime($toBeComparedDate))->format('Y-m-d');
var_dump(strtotime($today)> strtotime($expiry));//false or true
I potrzebujesz PHP> = 5.4 dla (new DateTime ()) -> format ('Ym-d');
webrama.pl
6
Jedna uwaga oparta na moim doświadczeniu, jeśli twój cel dotyczy tylko daty, pamiętaj o dołączeniu znacznika czasu . Powiedzmy, że dzisiaj jest "2016-11-09". Porównanie znacznika czasu unieważni tutaj logikę. Przykład,
// input
$var ="2016-11-09 00:00:00.0";// check if date is today or in the futureif( time()<= strtotime($var)){// This seems right, but if it's ONLY date you are after// then the code might treat $var as past depending on// the time.}
Powyższy kod wydaje się odpowiedni, ale jeśli jest to TYLKO data, którą chcesz porównać, to powyższy kod nie jest właściwą logiką. Czemu? Ponieważ time () i strtotime () zapewnią dołączenie znacznika czasu. To znaczy, mimo że obie daty przypadają tego samego dnia, ale różnica w czasie będzie miała znaczenie. Rozważ poniższy przykład:
// plain date string
$input ="2016-11-09";
Ponieważ wejście jest zwykłym ciągiem daty, użycie strtotime()on $inputzakłada, że jest północ północ 11.11.2016. Tak więc bieganie w time()dowolnym momencie po północy zawsze będzie traktowane $inputjak przeszłość, nawet jeśli są tego samego dnia.
Aby to naprawić, możesz po prostu napisać kod:
if(date("Y-m-d")<= $input){
echo "Input date is equal to or greater than today.";}
Jestem pewien, że OP zastanowił się nad tym i dlatego w swoim pytaniu umieścili „00: 00: 00.0”
AaA
6
Kilka lat później potwierdzam spostrzeżenie Bobby'ego Jacka, że ostatnie 24 godziny nie są dzisiaj !!! I jestem zaskoczony, że odpowiedź była tak pozytywnie oceniona ...
Aby porównać, jeśli dana data jest mniejsza, równa lub większa od innej, najpierw musisz ją „zmniejszyć” do początku dnia. Innymi słowy, upewnij się, że mówisz o tej samej godzinie 00:00:00 w obu datach. Można to zrobić w prosty i elegancki sposób:
strtotime("today")<=> strtotime($var)
jeśli $varma część czasu na 00:00:00 jak określony PO.
Zamień na <=>cokolwiek potrzebujesz (lub zachowaj to w php 7)
//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);//now compare the two datesif($intDiff >0){echo '$date1 is in the past';}else{echo 'date1 is today or in the future';}
Mam nadzieję, że to pomoże. Mój pierwszy post na stackoverflow!
Odpowiedzi:
Zamienia to w wartość czasu
Od tego momentu daje ci sekundy
$var
Sprawdzi, czy
$var
minął ostatni dzień.źródło
Ten format jest idealnie odpowiedni do standardowego porównania ciągów np
Aby uzyskać dzisiejszą datę w tym formacie, wystarczy użyć:
date("Y-m-d H:i:s")
.Więc:
Na tym polega piękno tego formatu: ładnie się porządkuje. Oczywiście może to być mniej wydajne, w zależności od konkretnych okoliczności, ale może być także o wiele wygodniejsze i prowadzić do łatwiejszego do utrzymania kodu - musielibyśmy wiedzieć więcej, aby naprawdę wykonać to osąd.
Dla właściwej strefy czasowej możesz użyć na przykład:
Kliknij tutaj, aby zapoznać się z dostępnymi strefami czasowymi PHP.
źródło
mm/dd/yyyy
daty i czasu w formacie do daty, a następnie ich porównanie. Zawsze martwię się, gdy programiści mają daty w wielu strefach czasowych w swoim systemie. Myślę, że lepiej jest przechowywać daty w systemie, zawsze w jednej strefie czasowej, a następnie wyświetlać je w dowolnej strefie czasowej. Zacząłem używaćyyyy-mm-dd
formatu (lubyyyymmdd
) około 1998 roku, kiedy zdałem sobie sprawę, że sortuje on znacznie szybciej, nawet na serwerze SQL.Proszę bardzo:
Ponadto kilka dodatkowych funkcji pomocniczych:
źródło
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
i to zrobiło to dla mnie.Aby ukończyć BoBby Jack, użyj DateTime OBject, jeśli masz php 5.2.2+:
źródło
Możesz użyć
DateTime
klasy:Operatory porównania działają *:
Możliwe jest również pobranie wartości znaczników czasu z obiektów DateTime i porównanie ich:
* Uwaga:
===
zwraca wartość false podczas porównywania dwóch różnych obiektów DateTime, nawet jeśli reprezentują tę samą datę.źródło
$future
stało się przeszłością. : Pźródło
$var
jest moje równe w OPJedna uwaga oparta na moim doświadczeniu, jeśli twój cel dotyczy tylko daty, pamiętaj o dołączeniu znacznika czasu . Powiedzmy, że dzisiaj jest
"2016-11-09"
. Porównanie znacznika czasu unieważni tutaj logikę. Przykład,Powyższy kod wydaje się odpowiedni, ale jeśli jest to TYLKO data, którą chcesz porównać, to powyższy kod nie jest właściwą logiką. Czemu? Ponieważ time () i strtotime () zapewnią dołączenie znacznika czasu. To znaczy, mimo że obie daty przypadają tego samego dnia, ale różnica w czasie będzie miała znaczenie. Rozważ poniższy przykład:
Ponieważ wejście jest zwykłym ciągiem daty, użycie
strtotime()
on$input
zakłada, że jest północ północ 11.11.2016. Tak więc bieganie wtime()
dowolnym momencie po północy zawsze będzie traktowane$input
jak przeszłość, nawet jeśli są tego samego dnia.Aby to naprawić, możesz po prostu napisać kod:
źródło
Kilka lat później potwierdzam spostrzeżenie Bobby'ego Jacka, że ostatnie 24 godziny nie są dzisiaj !!! I jestem zaskoczony, że odpowiedź była tak pozytywnie oceniona ...
Aby porównać, jeśli dana data jest mniejsza, równa lub większa od innej, najpierw musisz ją „zmniejszyć” do początku dnia. Innymi słowy, upewnij się, że mówisz o tej samej godzinie 00:00:00 w obu datach. Można to zrobić w prosty i elegancki sposób:
jeśli
$var
ma część czasu na 00:00:00 jak określony PO.Zamień na
<=>
cokolwiek potrzebujesz (lub zachowaj to w php 7)Oczywiście mówimy o tej samej strefie czasowej dla obu. Aby uzyskać listę obsługiwanych stref czasowych
źródło
(przykład w3schools, działa idealnie)
źródło
Rozwijając odpowiedź Josua z w3schools:
Mam nadzieję, że to pomoże. Mój pierwszy post na stackoverflow!
źródło
Porównaj obiekty daty i godziny:
(Wybrałem 10 dni - wszystko starsze niż 10 dni to „STARE”, w przeciwnym razie „NOWE”)
źródło
Niektóre podane odpowiedzi nie uwzględniają bieżącego dnia!
Oto moja propozycja.
źródło
Jeśli robisz rzeczy z czasem i datami, Carbon jest twoim najlepszym przyjacielem;
Zainstaluj pakiet, a następnie:
lt = mniej niż, gt = więcej niż
Jak w pytaniu:
i wiele więcej;
źródło