How to compare two dates in php

Php

Php Problem Overview


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..

Php Solutions


Solution 1 - Php

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.

Solution 2 - Php

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

Solution 3 - Php

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 (php >= 5.3.0) and Compare them directly

$date1 = new DateTime("2009-10-11");
$date2 = new DateTime("tomorrow"); // Can use date/string just like strtotime.
var_dump($date1 < $date2);

Solution 4 - Php

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"

Solution 5 - Php

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

Solution 6 - Php

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

Solution 7 - Php

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;

Solution 8 - Php

Don't know what your 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;
	}
}

Solution 9 - Php

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

Solution 10 - Php

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

Solution 11 - Php

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

Solution 12 - Php

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

Solution 13 - Php

benchmark comparison date_create, strtotime, DateTime, and direct

direct is faster

$f1="2014-12-12";
$f2="2014-12-13";
$diff=false;


$this->bench('a');
for ($i=0; $i < 20000; $i++) { 
	$date1=date_create($f1);
	$date2=date_create($f2);
	$diff=date_diff($date1,$date2);
}
$this->bench('a','b');
for ($i=0; $i < 20000; $i++) { 
	 $date1=strtotime($f1);
	 $date2=strtotime($f2);
	 if ($date1>$date2) {
	 	$diff=true;
	}
}
$this->bench('b','c');
for ($i=0; $i < 20000; $i++) { 
	$date1 = new DateTime($f1);
	$date2 = new DateTime($f2);
	if ($date1>$date2) {
	 	$diff=true;
	 }
}
$diff=false;
$this->bench('c','d');
for ($i=0; $i < 20000; $i++) { 
	 if ($f1>$f2) {
	 	$diff=true;
	 }
}
$this->bench('d','e');
var_dump($diff);

$this->dumpr($this->benchs);

results:

    [a] => 1610415241.4687
    [b] => 1610415242.8759
    [a-b] => 1.407194852829
    [c] => 1610415243.5672
    [b-c] => 0.69137716293335
    [d] => 1610415244.7036
    [c-d] => 1.1363649368286
    [e] => 1610415244.7109
    [d-e] => 0.0073208808898926

Solution 14 - Php

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

Solution 15 - Php

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

Solution 16 - Php

If both dates are in the same format then use a comparison operator.

$date1 = "2018-05-05"; 
$date2 = "2019-08-19"; 
  
//comparison operator to  

if ($date1 > $date2) {
    echo "$date1 is latest than $date2"; 
    }
else{
    echo "$date1 is older than $date2"; 
    }

Output: 2018-05-05 is older than 2019-08-19

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRohan KumarView Question on Stackoverflow
Solution 1 - PhpdkulkarniView Answer on Stackoverflow
Solution 2 - PhpnevvermindView Answer on Stackoverflow
Solution 3 - PhpMohd Abdul MujibView Answer on Stackoverflow
Solution 4 - PhpRishabhView Answer on Stackoverflow
Solution 5 - PhpManikantaView Answer on Stackoverflow
Solution 6 - PhpRohan KumarView Answer on Stackoverflow
Solution 7 - PhpFrederick G. SandaloView Answer on Stackoverflow
Solution 8 - PhpdevdRewView Answer on Stackoverflow
Solution 9 - PhpEpitácio BessaView Answer on Stackoverflow
Solution 10 - PhpianaceView Answer on Stackoverflow
Solution 11 - PhpAlunView Answer on Stackoverflow
Solution 12 - PhpDanilo PereiraView Answer on Stackoverflow
Solution 13 - PhpJosé Gpe. Álvarez C.View Answer on Stackoverflow
Solution 14 - PhpHitesh TarbundiyaView Answer on Stackoverflow
Solution 15 - PhpSantiView Answer on Stackoverflow
Solution 16 - PhpMy Info AddaView Answer on Stackoverflow