Сравните данную дату с сегодняшним днем

Я следую

$var = "2010-01-21 00:00:00.0" 

Я бы хотел сравнить эту дату с сегодняшней датой (т.е. я хотел бы знать, есть ли этот $var до сегодняшнего дня или равен сегодня или нет)

Какую функцию мне нужно использовать?

Solutions Collecting From Web of "Сравните данную дату с сегодняшним днем"

 strtotime($var); 

Превращает его в значение времени

 time() - strtotime($var); 

Дает вам секунды, так как $var

 if((time()-(60*60*24)) < strtotime($var)) 

Будет проверять, был ли $var в последний день.

Этот формат идеально подходит для стандартного сравнения строк, например

 if (date1 > date2) 

Чтобы получить сегодняшнюю дату в этом формате, просто используйте: date("Ymd H:i:s") .

Так:

 $today = date("Ymd H:i:s"); $date = "2010-01-21 00:00:00"; if ($date < $today) { 

В этом красота этого формата: он красиво заказывает. Конечно, это может быть менее эффективным, в зависимости от ваших конкретных обстоятельств, но это также может быть намного более удобным и привести к более удобному коду – нам нужно знать больше, чтобы действительно сделать это решение.

Для правильного часового пояса вы можете использовать, например,

 date_default_timezone_set('America/New_York'); 

Нажмите здесь, чтобы обратиться к доступным временным часам PHP.

Ну вот:

 function isToday($time) // midnight second { return (strtotime($time) === strtotime('today')); } isToday('2010-01-22 00:00:00.0'); // true 

Кроме того, некоторые дополнительные вспомогательные функции:

 function isPast($time) { return (strtotime($time) < time()); } function isFuture($time) { return (strtotime($time) > time()); } 

Чтобы завершить BoBby Jack, использование объекта DateTime OBject, если у вас есть php 5.2.2+:

 if(new DateTime() > new DateTime($var)){ // $var is before today so use it } 

Вы можете использовать класс DateTime :

 $past = new DateTime("2010-01-01 00:00:00"); $now = new DateTime(); $future = new DateTime("2020-01-01 00:00:00"); 

Операторы сравнения работают *:

 var_dump($past < $now); // bool(true) var_dump($future < $now); // bool(false) var_dump($now == $past); // bool(false) var_dump($now == new DateTime()); // bool(true) var_dump($now == $future); // bool(false) var_dump($past > $now); // bool(false) var_dump($future > $now); // bool(true) 

Также можно захватить значения метки времени из объектов DateTime и сравнить их:

 var_dump($past ->getTimestamp()); // int(1262286000) var_dump($now ->getTimestamp()); // int(1431686228) var_dump($future->getTimestamp()); // int(1577818800) var_dump($past ->getTimestamp() < $now->getTimestamp()); // bool(true) var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true) 

* Обратите внимание, что === возвращает false при сравнении двух разных объектов DateTime, даже когда они представляют одну и ту же дату.

 $toBeComparedDate = '2014-08-12'; $today = (new DateTime())->format('Ym-d'); //use format whatever you are using $expiry = (new DateTime($toBeComparedDate))->format('Ym-d'); var_dump(strtotime($today) > strtotime($expiry)); //false or true 

Несколько лет спустя я заметил второе наблюдение Бобби Джека, что последние 24 часа не сегодня! И я удивлен, что ответ был так много поддержан …

Чтобы сравнить, если определенная дата меньше, равна или больше другой, сначала вам нужно повернуть их вниз на начало дня. Другими словами, убедитесь, что вы говорите о том же 00:00:00 в обе даты. Это можно просто и элегантно сделать следующим образом:

 strtotime("today") <=> strtotime($var) 

если $ var имеет временную часть в 00:00:00, как указано OP.

Замените <=> тем, что вам нужно (или сохраните его в php 7)

Также, очевидно, мы говорим о том же часовом поясе для обоих.

 $date1=date_create("2014-07-02"); $date2=date_create("2013-12-12"); $diff=date_diff($date1,$date2); 

(пример w3schools, он отлично работает)

Одно предостережение, основанное на моем опыте, если ваша цель связана только с датой, то будьте осторожны, чтобы включить метку времени . Например, сегодня говорят "2016-11-09" . Сравнение с временной меткой приведет к аннулированию логики здесь. Пример,

 // input $var = "2016-11-09 00:00:00.0"; // check if date is today or in the future if ( 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. } 

Вышеприведенный код кажется правильным, но если это ТОЛЬКО дата, которую вы хотите сравнить, то приведенный выше код не является правильной логикой. Зачем? Потому что time () и strtotime () будут включать временную метку. То есть, хотя обе даты выпадают в тот же день, но разница во времени будет иметь значение. Рассмотрим приведенный ниже пример:

 // plain date string $input = "2016-11-09"; 

Поскольку входной strtotime() является строкой даты, использование strtotime() в $input предполагает, что это полночь 2016-11-09. Таким образом, time() любое время после полуночи всегда будет обрабатывать $input как прошлое, даже если они находятся в тот же день.

Чтобы исправить это, вы можете просто кодировать, например:

 if (date("Ymd") <= $input) { echo "Input date is equal to or greater than today."; } 

Другим полезным примером может быть простой класс PHP.

Он предоставляет множество методов, а также функции сравнения.

например:

 $date = new simpleDate(); echo $date->now()->compare('2010-01-21 00:00:00')->isBefore(); 

На странице учебников также есть много примеров. Пожалуйста, нажмите здесь .