У меня есть следующие
$var = "2010-01-21 00:00:00.0"
Я бы хотел сравнить эту дату с сегодняшней датой (т.е. я хотел бы знать, есть ли это $var
до сегодняшнего дня или равно сегодня или нет)
Какую функцию мне нужно использовать?
У меня есть следующие
$var = "2010-01-21 00:00:00.0"
Я бы хотел сравнить эту дату с сегодняшней датой (т.е. я хотел бы знать, есть ли это $var
до сегодняшнего дня или равно сегодня или нет)
Какую функцию мне нужно использовать?
strtotime($var);
Вводит его в значение времени
time() - strtotime($var);
Дает вам секунды с $var
if((time()-(60*60*24)) < strtotime($var))
Будет проверять, был ли $var
в течение последнего дня.
Этот формат идеально подходит для стандартного сравнения строк, например.
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.
Здесь вы идете:
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('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
Спустя несколько лет я снова заметил, что Бобби Джек последние 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 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.";
}
Другим полезным примером может быть простой класс PHP.
Он предоставляет множество методов, а также функции сравнения.
например:
$date = new simpleDate();
echo $date->now()->compare('2010-01-21 00:00:00')->isBefore();
На странице учебников также есть много примеров. Нажмите здесь.
Расширение на ответ 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!
Сравните объекты даты и времени:
(Я выбрал 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');
}
Если вы делаете вещи со временем и датами, Карбон - ваш лучший друг;
Установите пакет тогда:
$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;
и многое другое;