Сравните данную дату с сегодняшним днем - PullRequest
193 голосов
/ 22 января 2010

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

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

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

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

Ответы [ 13 ]

269 голосов
/ 22 января 2010
strtotime($var);

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

time() - strtotime($var);

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

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

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

191 голосов
/ 22 января 2010

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

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.

56 голосов
/ 22 января 2010

Вот, пожалуйста:

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());
}
45 голосов
/ 25 июля 2013

Для завершения BoBby Jack используйте DateTime OBject, если у вас php 5.2.2+:

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

}
41 голосов
/ 15 мая 2015

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

12 голосов
/ 12 августа 2014
$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
6 голосов
/ 23 февраля 2016

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

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

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

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

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

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

5 голосов
/ 09 ноября 2016

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

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

if (date("Y-m-d") <= $input)
{
    echo "Input date is equal to or greater than today.";
}
5 голосов
/ 03 июля 2014
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);

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

3 голосов
/ 30 марта 2014

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

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

например:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...