PHP strtotime возвращает false

Ниже приведен вывод из базы данных, и я пытаюсь получить количество месяцев между датой начала и датой из базы данных. Ниже мой вывод

string(10) "12/12/2010" Date : 12/12/2010 - 1292112000
string(10) "19/04/2000" Date : 19/04/2000 -
string(10) "08/08/2007" Date : 08/08/2007 - 1186527600
string(10) "20/06/2011" Date : 20/06/2011 - 

Как видите, вторая и четвертая временные метки unix пусты. Я не знаю, что может быть причиной проблемы. Ниже приведен код, который я использую, чтобы повторить то, что вы видите выше.

echo "Date : " . $row['startDate'] . " - " . strtotime($row['startDate']) . var_dump($row['startDate']). "<br />";

person roadkill247    schedule 28.03.2013    source источник
comment
разделитель / — это формат США, а 20/06 6-й день 20-го месяца — недопустимая дата.... используйте разделитель — для дат в Великобритании — php.net/manual/en/datetime.formats.date.php   -  person Mark Baker    schedule 28.03.2013


Ответы (2)


Из руководства:

Даты в форматах м/д/г или д-м-г устраняются путем просмотра разделителя между различными компонентами: если разделителем является косая черта (/), то предполагается американский м/д/г; тогда как если разделителем является тире (-) или точка (.), то предполагается европейский формат dmy.

Во избежание потенциальной двусмысленности лучше использовать даты в формате ISO 8601 (ГГГГ-ММ-ДД) или DateTime::createFromFormat(), когда это возможно.

person John Conde    schedule 28.03.2013

Решил проблему, я использовал некоторые из новых функций DateTime в 5.3 PHP

$originalDate = str_replace("/", "-", $row['startDate']);
$date1 = new DateTime($originalDate);
$date2 = new DateTime('now');

$interval = date_diff($date1, $date2);

echo "Months" . $interval->format('%m') . ($interval->format('%y') * 12) . "<br />";
person roadkill247    schedule 28.03.2013