5

I have two variables containing strings of dates in the format

$four_days_have_passed = "07-14-2013";
$now = "07-10-2013";

I have checked the output in FirePHP and the dates are correct.

Then I try to compare them like this,

if (strtotime($now) < strtotime($four_days_have_passed))
{
  Do Stuff
}

Why does the code inside the IF statement never execute?

David Folksman
  • 225
  • 3
  • 8
  • 24

5 Answers5

7

If you want to use MM/DD/YYYY format you need / separator.

$four_days_have_passed = "07/14/2013";
$now = "07/10/2013";

From the manual:-

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

vascowhite
  • 18,120
  • 9
  • 61
  • 77
Daniel Kmak
  • 18,164
  • 7
  • 66
  • 89
2

The format (when used like that) is DD-MM-YYYY. There is no 14th month.

alex
  • 479,566
  • 201
  • 878
  • 984
  • I have forced the format to `$now = date('m-d-Y', strtotime($getCurrentDate . "+0 day")); $four_days_have_passed = date('m-d-Y', strtotime($getRepDate . "+4 days"));` – David Folksman Jul 09 '13 at 23:21
  • @David Folksman: no you haven't. `strtotime` doesn't expect it to be in american format. – zerkms Jul 09 '13 at 23:21
  • Hence why I used the format m-d-y, i dont understand your answer? – David Folksman Jul 09 '13 at 23:22
  • @David Folksman: `strtotime` accepts the date to be in either `YYYY-MM-DD` (preferred) or `DD-MM-YYYY` format. That's it. More accepted formats here: http://php.net/manual/en/datetime.formats.date.php – zerkms Jul 09 '13 at 23:23
  • Works here? http://writecodeonline.com/php/ `date_default_timezone_set('Europe/London'); $getCurrentDate = str_replace('/', '-',$_REQUEST['date']); $four_days_have_passed = date('m-d-Y', strtotime($getCurrentDate . "+4 days")); $now = date('m-d-Y', strtotime($rep1 . "+0 day")); echo $four_days_have_passed; echo "
    ".$now; if ($now < $four_days_have_passed) { echo "
    booya"; }`
    – David Folksman Jul 09 '13 at 23:24
  • Well, it's up to you to not trust me and documentation. If you think that it "works there" - use it, good luck :-) – zerkms Jul 09 '13 at 23:25
2

I see you accepted answer but just to make sure you understand. There are 2 cases that dates are parsed.

  1. American - month/day/year
  2. European - day.month.year or day-month-year

You have error because you provided european format "07-14-2013" and there's no 14 month in year.

The proper format for you is one of these:

  • 14-07-2013 - Europe
  • 14.07.2013 - Europe
  • 07/14/2013 - American

Morover, to compare datatime it's better to use object oriented solution and DataTime object. You can read more here.

Robert
  • 19,800
  • 5
  • 55
  • 85
0

The case of strtotime() function is the most easy way to handle using the format as yyyy-mm-dd. This is normal format in db date. If you use this format help easy for compare two dates.

Alex M
  • 2,756
  • 7
  • 29
  • 35
0

In Europe, in particulary in France, we also use this format with the slash separator :

day/month/year

example for a french date : 26/08/2019

Yohan M
  • 1
  • 2