Search code examples
phpdatecomparisondate-comparison

What's the issue in a code written for comparing the date with today's date?


I'm comparing a date with current date(i.e. today's date). It is expected that the error should come only when the date to be compared is greater than today's date. It should not come for date which is less than or equal to today's date.

I've written following code for it.

$submission_date = $_POST['submission_date']; //The date in mm-dd-yyyy format that is to be tested against today's date. The value in $submission date is 12-25-2014 
//This is a future date. Today's date is 12-10-2014 in dd-mm-yyyy format

$current_date = date('m-d-Y');

if (strtotime($submission_date) > strtotime($current_date))
{
   echo "Future date not accepted";
}

With the above code I'm not getting errors for future dates, sometimes I'm getting error for previous dates as well.

How to optimize and make this code correct and standard?


Solution

  • If posted format is in m-d-Y, then you cannot convert it to unix timestamp directly with strtotime() function, because it will return false.

    If you need to use strtotime() then change the input format to m/d/Y by simple str_replace().

    On the other hand, you could use DateTime class, where you can directly compare objects:

    $submission_date = DateTime::createFromFormat('!m-d-Y', $submission_date);
    $today_date = new DateTime('today');
    
    if ($submission_date > $today_date) {
        echo "submission_date is in the future\n";
    }
    

    demo

    If you need to extract some information from DateTime objects, use format() method on them, which accepts same format as date() function:

    echo $today_date->format('m/d/Y'); # 12/11/2014
    echo $today_date->format('m-d-Y'); # 12-11-2014
    echo $today_date->format('Y-m-d'); # 2014-12-11
    echo $today_date->format('Y-Y-Y'); # 2014-2014-2014
    

    demo