Home > Software engineering >  php compare dates with different years
php compare dates with different years

Time:07-26

We want to compare two dates, that can be in two different years.

Therefore we tried this, but that does not seems to work

PHP:

<?php
    $delivery_date = '08-20-2023';
    $today = '26-07-2022';
    if ($delivery_date > $today){
    echo 'true';
    }else{
    echo 'false';
    }
?>

See: https://www.tehplayground.com/sa29CAHd5SuuRkXv

How can we solve this?

EDIT:

Seems that we face another strange thing. For some reason it can not read the date well:

$var = '08-20-2023';
$delivery_date = date("Y-m-d", strtotime($var));

This will $delivery_date return: 1970-01-01;

Fetching the following error: DateTime::__construct(): Failed to parse time string (08-20-2023) at position 0 (0): Unexpected character

What are we missing here, because we do not see the unexpected character?

CodePudding user response:

You can wrap both of the two date strings in DateTime::createFromFormat(). Match the first argument of the function with the format of the date string. You can find reference here: https://www.php.net/manual/en/datetime.format.php

$delivery_date = DateTime::createFromFormat('m-d-Y', '08-20-2023');
$today = DateTime::createFromFormat('d-m-Y', '26-07-2022');


if ($delivery_date > $today) {
    echo 'true';
} else {
    echo 'false';
}

Returns true

CodePudding user response:

You have multiple methods for doing this. If both are in same foramt

 <?php
    $date1 = "1998-11-24";
    $date2 = "1997-03-26";
    if ($date1 > $date2)
        echo "$date1 is latest than $date2";
    else
        echo "$date1 is older than $date2";
    ?>

Output: 1998-11-24 is latest than 1997-03-26

If both have different formats

<?php

$date1 = "12-03-26";
$date2 = "2011-10-24";

$dateTimestamp1 = strtotime($date1);// Use strtotime() function to convert
$dateTimestamp2 = strtotime($date2);
  
// Compare the timestamp date 
if ($dateTimestamp1 > $dateTimestamp2)
    echo "$date1 is latest than $date2";
else
    echo "$date1 is older than $date2";
?>

Output: 12-03-26 is latest than 2011-10-24

CodePudding user response:

make sure both dates in same format

Proper way

<?php
$var = '08-20-2023';
$date_arr=explode('-',$var);
$deliver_timestamp=mktime(0, 0, 0,$date_arr[0],$date_arr[1], $date_arr[2]);
$today = '07-26-2022';
$tdate_arr=explode('-',$today);

$today_timestamp=mktime(0, 0, 0,$tdate_arr[0],$tdate_arr[1], $tdate_arr[2]);

    if ($deliver_timestamp > $today_timestamp){
    echo 'true';
    }else{
    echo 'false';
    }
    
?>

simplified

<?php
$var = '08-20-2023';
$date_arr=explode('-',$var);
$deliver_timestamp=mktime(0, 0, 0,$date_arr[0],$date_arr[1], $date_arr[2]);


$today_timestamp=time();    
    if ($deliver_timestamp > $today_timestamp){
    echo 'true';
    }else{
    echo 'false';
    }
    
?>
  • Related