Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating PHP DateTime when format is unknown

Tags:

php

datetime

With the help of this question, I have been able to parse a date string into a DateTime object, then display it in the desired format. The DateTime constructor works well in deciphering DateTime strings with one (very understandable) exception - it cannot tell the difference between dd/mm/YYYY and mm/dd/YYYY.

If I do the following:

$dt = new DateTime("05/03/1900"); // 5th march 1900
echo $dt->format('Y-m-d');

Then I get the following output:

1900-05-03

However, the original date is in dd/mm/YYYY format, so my output is incorrect - I now have the 3rd May 1900.

Is there a way to set DateTime to prefer dd/mm/YYYY over mm/dd/YYYY when parsing a date string?

Edit: I am calling date_default_timezone_set('Europe/London'); in the constructor of this class but this doesn't seem to have any effect. Perhaps this isn't linked to the DateTime class.

like image 547
Mike Baxter Avatar asked Nov 27 '25 13:11

Mike Baxter


1 Answers

You can use the DateTime::createFromFormat

$dt = DateTime::createFromFormat( 'd/m/Y', '05/03/1900' );
echo $dt->format( 'Y-m-d' );
like image 50
Jrod Avatar answered Nov 30 '25 03:11

Jrod