Я следую
$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("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();
На странице учебников также есть много примеров. Пожалуйста, нажмите здесь .