Сравнение двух дат


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

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

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

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

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

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

Но на самом деле это так не работает. Какой еще способ сделать это?

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

Author: Machavity, 2010-10-03

13 answers

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

Сохраните его в ГГГГ-ММ-ДД, а затем сравнение строк будет работать, потому что "1"> "0" и т. Д.

 69
Author: Matthew, 2010-10-02 22:31:12

Если все ваши даты после 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 */ }

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

 190
Author: Hugo Peixoto, 2018-04-30 00:06:51

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

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



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

Обновление: Или просто используйте старомодную функцию дата():

if(date('Y-m-d') < date('Y-m-d', strtotime($expire_date))){
  //echo not yet expired! 
}   
 18
Author: d.raev, 2018-04-30 00:05:28

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

SELECT IF(expireDate < NOW(),TRUE,FALSE) as isExpired FROM tableName
 6
Author: Dr.Molle, 2010-10-03 07:59:13
$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);
$timeDiff = $diff->format("%R%a days");

echo $timeDiff;
if($timeDiff < 0){
    echo "Expired.";
}else{
    echo "Not expired.";
}
 3
Author: Atif Mahmood, 2016-08-18 07:11:15
$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";
   }
 2
Author: Shruthi reddy, 2014-12-05 03:21:05

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

// 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
Author: Syno, 2017-12-06 13:59:23

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

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

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

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

 1
Author: isa, 2014-03-30 09:40:48

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

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

if(($today - $expire) > $NUMBER_OF_DAYS) 
{ 
    //do something; 
}
 1
Author: PiotrK, 2014-04-08 07:26:06

Нашел ответ в блоге vipdomaine, и это так просто, как:

strtotime(date("Y"."-01-01")) -strtotime($newdate))/86400

И вы получите дни между двумя датами.

 0
Author: kooli, 2015-12-20 10:04:45

Просто вы можете проверить..

if ($startdate < $date) {// do something} 
if ($startdate > $date) {// do something}

Но обе даты должны быть в одном формате

Y-m-d или d-m-Y

И т.д.

 0
Author: sanjyot, 2016-10-03 13:40:00
    while ($row=mysql_fetch_array($result))
    {


        $orderdate=explode('-',$row['alertdate']);
        $date=$orderdate[0];
        $month=$orderdate[1];
        $year=$orderdate[2];

        if((date(Y)>=$year) and (date(m)>=$month) and (date(d)>=$date))
        {
          //write your true code  

        }
        else
        {
          //write your false code 
        }
 0
Author: naga kotesh, 2017-10-27 12:01:07

Прежде всего, попробуйте задать формат, который вы хотите, для текущей даты и времени вашего сервера:

  1. Получить текущую дату и время

    $current_date = получить дату();

  2. Разделите дату и время, чтобы управлять ими по своему усмотрению:

$current_date_only = $current_date[год].'-'.$current_date[понедельник].'-'.$current_date[день]; $current_time_only = только текущее время= $текущая дата['часы'].':'.$текущая дата['минуты'].':'.$текущая дата['секунды'];

  1. Сравните это в зависимости от того, используете ли вы в своей БД дату или время:

    $сегодня = $current_date_only.''.$current_time_only;

    Или

    $сегодня = $current_date_only;

    Если($сегодня

Надеюсь, это поможет

 0
Author: ernestoloredo, 2018-05-01 14:12:07