Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP strtotime for June returns July

Tags:

php

I'm stumped as to why the following PHP strtotime function returns '07' as the month number, rather than '06' when $monthToGet = 'June':

$monthToGet = $_GET['mon'];
$monthAsNumber = date('m', strtotime($monthToGet));

From searching, it appears it may be due to default date parameters (in this case the day and year) as I haven't specified them. Would that be the cause?

Any suggestions appreciated!

like image 618
Wookie Avatar asked Jul 31 '12 13:07

Wookie


2 Answers

TL;DR

You are right

echo date("m", strtotime("June"));
-> 07

However, this does work:

echo date("m", strtotime("1. June 2012"));
-> 06

The problem explained

Today is 31. July 2012 and since you provide only a month, the current day and current year are used to create a valid date.

See the documentation:

NOTE

The function expects to be given a string containing an English date format and will try to parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC), relative to the timestamp given in now, or the current time if now is not supplied.

Alternatives

You could use date_parse_from_format() or strptime() to achieve what you want with a slightly different approach.

(Thanks to johannes_ and johann__ for their input)

like image 70
fdomig Avatar answered Oct 16 '22 01:10

fdomig


Fixed with :

$monthToGet = '1 '. $_GET['mon'];

But I still don't get why, since "m" is a valid date format

like image 31
Jerska Avatar answered Oct 16 '22 03:10

Jerska