简体   繁体   中英

php compare dates with different years

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?

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM