How to compare two dates in php

2018-12-31 15:34发布

问题:

How to compare two dates in php if dates are in format \'03_01_12\' and \'31_12_11\' .

I am using this code:

$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;

But its not working..

回答1:

You will have to make sure that your dates are valid date objects.

Try this:

$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]));

You can then perform the strtotime() method to get the difference.



回答2:

Your brackets are not all matched:

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

Change to this:

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


回答3:

Using DateTime::createFromFormat:

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

var_dump($date1 > $date2);


回答4:

The date_diff() function returns the difference between two DateTime objects.

If the first date is before the second date a positive number of days will be returned; otherwise a negative number of days:

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

output will be \"+272 days\" ;

changing $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\");
    ?>

Output will be \"-93 days\"



回答5:

Extending @nevermind\'s answer, one can use DateTime::createFromFormat: like,

// 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);


回答6:

<?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\");
?>


回答7:

you can try something like:

        $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);

You can then access the difference in days like this $dateDiff->d;



回答8:

Don\'t know what you\'re problem is but:

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;
    }
}


回答9:

Try this

$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\";


回答10:

compare the result of maketime() for each of the time



回答11:

I know this is late, but for future reference, put the date format into a recognised format by using str_replace then your function will work. (replace the underscore with a dash)

//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);
}


回答12:

You can to converte for integer number and compare.

Eg.:

$date_1 = date(\'Ymd\'); $date_2 = \'31_12_2011\';

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

echo ($date_1 < $date_2) ? \'$date_2 is bigger then $date_1\' : \'$date_2 is smaller than $date_1\';



回答13:

Not answering the OPs actual problem, but answering just the title. Since this is the top result for \"comparing dates in php\".

Pretty simple to use Datetime Objects (v>= 5.3.0) and Compare them directly

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

Note: Datetime object can also be created for a predefined date as below.

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


回答14:

I think this one is very simple function

function terminateOrNotStringtoDate($currentDate, $terminationdate)
{
    $crtDate = new DateTime($currentDate);
    $termDate = new DateTime($terminationdate);
    if($crtDate >= $termDate)
    {
        return true;
    } else {
    return false;
    }
}


回答15:

Guys Please don\'t make it so complex The simple answer bellow

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

I just have added two more lines with your code



标签: php