Don Kirkby
Don Kirkby

Reputation: 56650

What date formats does the PHP function strtotime() support?

I really like the PHP function strtotime(), but the user manual doesn't give a complete description of the supported date formats. It only gives a few examples like "10 September 2000", "+1 week 2 days 4 hours 2 seconds", and "next Thursday".

Where can I find a complete description?

Upvotes: 4

Views: 9534

Answers (4)

Don Kirkby
Don Kirkby

Reputation: 56650

I can't find anything official, but I saw a tutorial that says strtotime() uses GNU Date Input Formats. Those are described in detail in the GNU manual.

One discrepancy I notice is that "next" doesn't match the behaviour described in the GNU manual. Using strtotime(), "next Thursday" will give you the same result as "Thursday", unless today is a Thursday.

If today is a Thursday, then

  • strtotime("Thursday") == strtotime("today")
  • strtotime("next Thursday") == strtotime("today + 7 days")

If today is not a Thursday, then

  • strtotime("Thursday") == strtotime("next Thursday")

I'm using PHP 5.2.6.

Update:

I guess the user manual has been updated since I posted this, or else I was blind. It now contains a link to the Date and Time Formats chapter, that includes a section on relative formats.

Upvotes: 7

JH.
JH.

Reputation: 4219

You can start to trace what it is doing by looking at the following C code:

http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c

Search for PHP_FUNCTION(strtotime)

Also this is the main regex parsing:

http://cvs.php.net/viewvc.cgi/php-src/ext/date/lib/parse_date.re

Good luck

Upvotes: 1

Justin Yost
Justin Yost

Reputation: 2340

Basically anything that date can create strtotime will parse. With one exception, it does have issues with non-US style formatting. So keep it Month-Day-Year type formatting in place.

Upvotes: 0

Michael Luton
Michael Luton

Reputation: 17

In my experience strtotime() can accept anything that even remotely looks like a date. The best way to figure out its boundaries are is to create a test script and plug in values and see what does and doesn't work.

$input = "Apr 10th";
print(date('Y-m-d', strtotime($input)));

Just keep changing the $input variable and observe the results.

Upvotes: 0

Related Questions