Converting string to Date and DateTime Converting string to Date and DateTime php php

Converting string to Date and DateTime


Use strtotime() on your first date then date('Y-m-d') to convert it back:

$time = strtotime('10/16/2003');$newformat = date('Y-m-d',$time);echo $newformat;// 2003-10-16

Make note that there is a difference between using forward slash / and hyphen - in the strtotime() function. To quote from php.net:

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.

To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.


You need to be careful with m/d/Y and m-d-Y formats. PHP considers / to mean m/d/Y and - to mean d-m-Y. I would explicitly describe the input format in this case:

$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');

That way you are not at the whims of a certain interpretation.


To parse the date, you should use: DateTime::createFromFormat();

Ex:

$dateDE = "16/10/2013";$dateUS = \DateTime::createFromFormat("d.m.Y", $dateDE)->format("m/d/Y");

However, careful, because this will crash with:

PHP Fatal error: Call to a member function format() on a non-object 

You actually need to check that the formatting went fine, first:

$dateDE = "16/10/2013";$dateObj = \DateTime::createFromFormat("d.m.Y", $dateDE);if (!$dateObj){    throw new \UnexpectedValueException("Could not parse the date: $date");}$dateUS = $dateObj->format("m/d/Y");

Now instead of crashing, you will get an exception, which you can catch, propagate, etc.

$dateDE has the wrong format, it should be "16.10.2013";