Как сравнить две даты в PHP



как сравнить две даты в php, если даты находятся в формате '03_01_12' и '31_12_11' .



Я использую этот код:



$date1=date('d_m_y');
$date2='31_12_11';
if(strtotime($date1) < strtotime($date2))
echo '1 is small ='.strtotime($date1).','.$date1;
else
echo '2 is small ='.strtotime($date2).','.$date2;


но это не работает..

474   13  
PHP

13 ответов:

вам нужно будет убедиться, что ваши даты являются действительными объектами даты.

попробуйте это:

$date1=date('d/m/y');
$tempArr=explode('_', '31_12_11');
$date2 = date("d/m/y", mktime(0, 0, 0, $tempArr[1], $tempArr[0], $tempArr[2]));

затем вы можете выполнить strtotime() метод, чтобы получить разницу.

ваши скобки не все совпало:

if(strtotime($date1))<strtotime($date2)))

изменить для этого:

if(strtotime($date1) < strtotime($date2))

С помощью DateTime:: createFromFormat:

$format = "d_m_y";
$date1  = \DateTime::createFromFormat($format, "03_01_12");
$date2  = \DateTime::createFromFormat($format, "31_12_11");

var_dump($date1 > $date2);

функция date_diff () возвращает разницу между двумя объектами DateTime.

Если первая дата предшествует второй дате, будет возвращено положительное число дней; в противном случае отрицательное число дней:

<?php
$date1=date_create("2013-03-15");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
echo $diff->format("%R%a days");
?>

выход будет "+272 дней";

изменение $date1 = "2014-03-15"

 <?php
    $date1=date_create("2014-03-15");
    $date2=date_create("2013-12-12");
    $diff=date_diff($date1,$date2);
    echo $diff->format("%R%a days");
    ?>

выход будет "-93 дни"

расширение @ nevermind ответ, можно использовать DateTime:: createFromFormat: например,

// use - instead of _. replace _ by - if needed.
$format = "d-m-y";
$date1  = DateTime::createFromFormat($format, date('d-m-y'));
$date2  = DateTime::createFromFormat($format, str_replace("_", "-",$date2));    
var_dump($date1 > $date2);
<?php
       $expiry_date = "2017-12-31 00:00:00"
       $today = date('d-m-Y',time()); 
       $exp = date('d-m-Y',strtotime($expiry_date));
       $expDate =  date_create($exp);
       $todayDate = date_create($today);
       $diff =  date_diff($todayDate, $expDate);
       if($diff->format("%R%a")>0){
             echo "active";
       }else{
           echo "inactive";
       }
       echo "Remaining Days ".$diff->format("%R%a days");
?>

вы можете попробовать что-то вроде:

        $date1 = date_create('2014-1-23'); // format of yyyy-mm-dd
        $date2 = date_create('2014-2-3'); // format of yyyy-mm-dd
        $dateDiff = date_diff($date1, $date2);
        var_dump($dateDiff);

вы можете получить доступ к разнице в днях, как это $dateDiff - >d;

Не знаю, что Вы проблема, но:

function date_compare($d1, $d2)
{
    $d1 = explode('_', $d1);
    $d2 = explode('_', $d2);

    $d1 = array_reverse($d1);
    $d2 = array_reverse($d2);

    if (strtotime(implode('-', $d1)) > strtotime(implode('-', $d2)))
    {
        return $d2;
    }
    else
    {
        return $d1;
    }
}

попробуй такое

$data1 = strtotime(\date("d/m/Y"));
$data1 = date_create($data1);
$data2 = date_create("21/06/2017");

if($data1 < $data2){
    return "The most current date is date1";
}

return "The most current date is date2";

сравнить результат maketime() для каждого времени

Я знаю, что это поздно, но для дальнейшего использования поместите формат даты в распознанный формат с помощью str_replace, тогда ваша функция будет работать. (заменить подчеркивание тире)

//change the format to dashes instead of underscores, then get the timestamp
$date1 = strtotime(str_replace("_", "-",$date1));
$date2 = strtotime(str_replace("_", "-",$date2));

//compare the dates
if($date1 < $date2){
   //convert the date back to underscore format if needed when printing it out.
   echo '1 is small='.$date1.','.date('d_m_y',$date1);
}else{
   echo '2 is small='.$date2.','.date('d_m_y',$date2);
}

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

например.:

$date_1 = дата ('Ymd'); $date_2 = '31_12_2011';

$date_2 = (int) implode (array_reverse(explode ( " _", $date_2)));

echo ($date_1

не отвечая на актуальную проблему OPs, но отвечая только на название. Так как это лучший результат для "сравнения дат в php".

довольно простой в использовании объектов Datetime (v>= 5.3.0) и сравнивать их напрямую

$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");
var_dump($date1 < $date2);

Примечание: объект Datetime также может быть создан для предопределенной даты, как показано ниже.

$date1 = new DateTime('2009-10-11');

Comments

    Ничего не найдено.