Currently, I am requesting an external web service to get some important information. However, the dates this web services return me are something like this:
16/11/2020 12:00:00 a. m.
So, I was in other implementations using a code like this to get the DateTime:
$date = '16/11/2020 12:00:00 a. m.';
$newDateTime = new \DateTime($date);
But it throws this error:
DateTime::__construct(): Failed to parse time string (16/11/2020 12:00:00 am) at position 0 (1): Unexpected character
At first, I thought the "a. m." part could cause it to I did this change:
$date = '16/11/2020 12:00:00 a. m.';
$date = str_replace('a. m.', 'am', $date);
$date = str_replace('p. m.', 'pm', $date);
$newDateTime = new \DateTime($date);
But the error persists. My last try was this:
$date = '16/11/2020 12:00:00 a. m.';
$date = str_replace('a. m.', 'am', $date);
$date = str_replace('p. m.', 'pm', $date);
$date = date("Y-m-d H:s:i", strtotime($date));
$newDateTime = new \DateTime($date);
But the result date I got is:
1970-01-01 00:00:00
So, what is the correct form to parse this kind of date?
Thanks.
You need to provide a matching format description:
<?php
$date = '16/11/2020 12:05:30 a. m.';
$date = str_replace('a. m.', 'am', $date);
$date = str_replace('p. m.', 'pm', $date);
$newDateTime = \DateTime::createFromFormat('d/m/Y h:i:s A', $date);
print_r($newDateTime->format('Y-m-d h:i:s'));
The output is:
2020-11-16 12:05:30