Как я могу сравнить две даты в PHP? - PullRequest
118 голосов
/ 03 октября 2010

Как я могу сравнить две даты в PHP?

В базе данных дата выглядит как 2011-10-2.

Если я хочу сравнить сегодняшнюю дату с датой вбазу данных, чтобы увидеть, какой из них больше, как бы я это сделал?

Я пробовал это,

$today = date("Y-m-d");
$expire = $row->expireDate //from db

if($today < $expireDate) { //do something; }

, но на самом деле это не работает.Как еще это можно сделать?

Обновление: я знаю, что это сообщение довольно старое, но я просто хотел упомянуть углерод, который является классом, который используется с laravel, но может использоваться с классическим php, и он делает чудеса сдаты.проверить это: Углерод

Ответы [ 13 ]

206 голосов
/ 03 октября 2010

Если все ваши даты относятся к 1 января 1970 года, вы можете использовать что-то вроде:

$today = date("Y-m-d");
$expire = $row->expireDate; //from database

$today_time = strtotime($today);
$expire_time = strtotime($expire);

if ($expire_time < $today_time) { /* do Something */ }

Если вы используете PHP 5> = 5.2.0, вы можете использовать класс DateTime:

$today_dt = new DateTime($today);
$expire_dt = new DateTime($expire);

if ($expire_dt < $today_dt) { /* Do something */ }

Или что-то в этом роде.

75 голосов
/ 03 октября 2010

в базе данных дата выглядит примерно таки т. д.

20 голосов
/ 01 октября 2013

Просто чтобы дополнить уже приведенные ответы, см. Следующий пример:

$today = new DateTime('');
$expireDate = new DateTime($row->expireDate); //from database



if($today->format("Y-m-d") < $expireDate->format("Y-m-d")) { 
    //do something; 
}

Обновление: Или простая функция old-school date () :

if(date('Y-m-d') < date('Y-m-d', strtotime($expire_date))){
    //echo not yet expired! 
}   
6 голосов
/ 03 октября 2010

Я бы не стал делать это с PHP.База данных должна знать, какой сегодня день (например, используйте MySQL-> NOW ()), поэтому будет очень легко сравнивать в Query и возвращать результат, без каких-либо проблем в зависимости от используемых типов дат * 1001.*

SELECT IF(expireDate < NOW(),TRUE,FALSE) as isExpired FROM tableName
4 голосов
/ 18 августа 2016
$today = date('Y-m-d');//Y-m-d H:i:s
$expireDate = new DateTime($row->expireDate);// From db 
$date1=date_create($today);
$date2=date_create($expireDate->format('Y-m-d'));
$diff=date_diff($date1,$date2);

//echo $timeDiff;
if($diff->days >= 30){
    echo "Expired.";
}else{
    echo "Not expired.";
}
2 голосов
/ 06 декабря 2017

Вот способ узнать разницу между двумя датами в минутах.

// set dates
$date_compare1= date("d-m-Y h:i:s a", strtotime($date1));
// date now
$date_compare2= date("d-m-Y h:i:s a", strtotime($date2));

// calculate the difference
$difference = strtotime($date_compare1) - strtotime($date_compare2);
$difference_in_minutes = $difference / 60;

echo $difference_in_minutes;
2 голосов
/ 05 декабря 2014
$today_date=date("Y-m-d");
$entered_date=$_POST['date'];
$dateTimestamp1 = strtotime($today_date);
$dateTimestamp2 = strtotime($entered_date);
$diff= $dateTimestamp1-$dateTimestamp2;
//echo $diff;
if ($diff<=0)
   {
     echo "Enter a valid date";
   }
1 голос
/ 08 апреля 2014

У меня тоже была эта проблема, и я решаю ее:

$today = date("Ymd");
$expire = str_replace('-', '', $row->expireDate); //from db

if(($today - $expire) > $NUMBER_OF_DAYS) 
{ 
    //do something; 
}
1 голос
/ 30 марта 2014

Вы можете использовать простой PHP для сравнения дат:

$date = new simpleDate();
echo $date->now()->compare($expire_date)->isBeforeOrEqual();

Это даст вам истину или ложь.

Вы можете проверить учебники для большего количества примеров. Пожалуйста нажмите здесь .

0 голосов
/ 10 января 2019

Вот мой пример того, как получить разницу в днях между двумя датами с помощью PHP.Обратите внимание на использование «!»в формате для сброса временной части дат, благодаря информации из DateTime createFromFormat без времени .

$today = DateTime::createFromFormat('!Y-m-d', date('Y-m-d'));
$wanted = DateTime::createFromFormat('!d-m-Y', $row["WANTED_DELIVERY_DATE"]);
$diff = $today->diff($wanted);
$days = $diff->days;
if (($diff->invert) != 0) $days = -1 * $days;
$overdue = (($days < 0) ? true : false);
print "<!-- (".(($days > 0) ? '+' : '').($days).") -->\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...