2013-03-28 2 views
-1

Ниже приведен вывод из базы данных, и я пытаюсь получить количество месяцев между датой начала и датой из базы данных. Ниже мой выводPHP strtotime return 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 />"; 
+0

а/Сепаратор США формат и 20/06 шестого дня 20-го месяца является неверной датой ... . use - separator for UK date - http://www.php.net/manual/en/datetime.formats.date.php –

ответ

8

От the manual:

Даты в м/д/г или DMY форматы снято неоднозначность, глядя на разделитель между различными компонентами: если сепаратор представляет собой слэш (/) , то предполагается американский m/d/y; тогда как если разделитель является тире (-) или точкой (.), то предполагается европейский формат d-m-y .

Чтобы избежать потенциальной двусмысленности, лучше всего использовать ISO 8601 (YYYY-MM-DD) даты или DateTime :: createFromFormat(), когда это возможно.

+3

+1 для чтения руководства. – Kermit

1

Решил проблему, я использовал некоторые из новых функций 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 />"; 
+0

вы str_replace сэкономили массу времени, спасибо человеку –