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

У меня есть следующие

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

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

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

Ответ 1

strtotime($var);

Вводит его в значение времени

time() - strtotime($var);

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

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

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

Ответ 2

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

if (date1 > date2)

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

Итак:

$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";

if ($date < $today) {

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

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

date_default_timezone_set('America/New_York');

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

Ответ 3

Здесь вы идете:

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());
}

Ответ 4

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

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

}

Ответ 5

Вы можете использовать класс 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, даже когда они представляют одну и ту же дату.

Ответ 6

$toBeComparedDate = '2014-08-12';
$today = (new DateTime())->format('Y-m-d'); //use format whatever you are using
$expiry = (new DateTime($toBeComparedDate))->format('Y-m-d');

var_dump(strtotime($today) > strtotime($expiry)); //false or true

Ответ 7

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

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

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

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

Замените <=> что вам нужно (или оставьте это в php 7)

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

Ответ 8

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

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

Ответ 9

Одно предостережение, основанное на моем опыте, , если ваша цель связана только с датой, будьте осторожны, чтобы включить метку времени. Например, скажем, сегодня "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 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() on $input будет считать, что это полночь 2016-11-09. Таким образом, запуск time() в любое время после полуночи всегда будет относиться к $input как к прошлому, даже если они находятся в один и тот же день.

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

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

Ответ 10

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

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

например:

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

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

Ответ 11

Расширение на ответ Josua от w3schools:

//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 dates
if ($intDiff > 0)  {echo '$date1 is in the past';}
else {echo 'date1 is today or in the future';}

Надеюсь, это поможет. Мой первый пост на stackoverflow!

Ответ 12

Сравните объекты даты и времени:

(Я выбрал 10 дней - все, что старше 10 дней - это "СТАРЫЕ", иначе "НОВОЕ")

$now   = new DateTime();
$diff=date_diff($yourdate,$now);
$diff_days = $diff->format("%a");
if($diff_days > 10){
    echo "OLD! " . $yourdate->format('m/d/Y');
}else{
    echo "NEW! " . $yourdate->format('m/d/Y');
}

Ответ 13

Если вы делаете вещи со временем и датами, Карбон - ваш лучший друг;

Установите пакет тогда:

$theDay = Carbon::make("2010-01-21 00:00:00.0");

$theDay->isToday();
$theDay->isPast();
$theDay->isFuture();
if($theDay->lt(Carbon::today()) || $theDay->gt(Carbon::today()))

lt = меньше чем, gt = больше чем

Как в вопросе:

$theDay->gt(Carbon::today()) ? true : false;

и многое другое;