В настоящее время принят неверный ответ. Он проверяет результат strtotime() на строку, которая эта функция никогда не вернет строку.
Дата «0000-00-00» анализируется как «-0001-11-30». Это объясняется в разделе Date Formats руководства по PHP:
Возможна перегрузка и уменьшение формата dd и DD. День 0 означает последний день предыдущего месяца, а переполнение - в следующем месяце. Это означает, что «2008-08-00» эквивалентен «2008-07-31» и «2008-06-31», эквивалентный «2008-07-01» (в июне всего 30 дней).
Обратите внимание, что с PHP 5.1.0 дневной диапазон ограничен 0-31, как указано в приведенном выше правильном выражении. Таким образом, например, «2008-06-32» не является допустимой строкой даты.
Также возможно использовать нижний предел формата mm и MM со значением 0. Значение месяца 0 означает декабрь предыдущего года. Например, пример «2008-00-22» эквивалентен «2007-12-22».
Если вы комбинируете предыдущие два факта и нижестоящие как день, но и месяц, происходит следующее: «2008-00-00» сначала преобразуется в «2007-12-00», который затем преобразуется в «2007- 11-30" . Это также происходит со строкой «0000-00-00», которая преобразуется в «-0001-11-30» (год -1 в календаре ISO 8601, который составляет 2 года до н.э. в пролептическом григорианском календаре).
Если вы используете более старую версию PHP или операционную систему 32-битную, StrToTime («0000-00-00») возвращает ложь, но не потому, что его распознающий его как не установлен, но потому что разобранная дата (30 ноября, -0001) выходит за рамки того, с какой даты она может справиться. Вызов этой же функции в 64-битной системе с новой версией PHP возвращает целое число, напоминающее -62169984000 (небольшая дисперсия в зависимости от часового пояса вашей системы).Это связано с тем, что эта система может обрабатывать предоставленную дату и правильно возвращает количество секунд между 1 января 1970 года и 30 ноября, -0001.
Таким образом, использование strtotime() в строке «0000-00-00», чтобы определить, было ли оно установлено или нет, является неправильным использованием функции и не возвращает желаемый результат. В строке «0000-00-00» рассматривается не установлено значение по умолчанию в этом вопросе, простое сравнение строк будет достаточно:
while($row = mysql_fetch_array($result)){
if($row['date'] != '0000-00-00'){ // string comparison to see if set or not
echo date('d-m-Y', strtotime($row['date']));
}
}
Обратите внимание, что на 32-битных системах и более старых версий PHP это будет только работать для дат между 13 декабря 1901 и 19 января 2038 года. Даты вне этого будут вызывать strtotime ($ row ['date']), чтобы вернуть false, которое функция date() будет интерпретировать как 0 и вернуть «01-01-1970», поскольку это 0 секунд с 1 января 1970 года.
Проблема заключается в том, что у меня есть это while ($ row = mysql_fetch_array ($ result)) {date ('dm-Y', strtotime ($ row ['date_out']))} так как я могу сделать условие if каждый раз для каждого цикла – user1347219
см. Я отредактировал свой ответ. Вы можете проверить условие во время цикла. – Dhruvisha
после того, как я попытался изо всех сил. Я все еще показываюсь 01-01-1970 Я сделал следующее: if (strtotime ($ row ['date'])! = '0000-00-00') { $ mydate = date (' dm-Y ', strtotime ($ row [' date '])); } else { $ mydate = ''; } и в качестве вывода Я эхо отзыва $ mydate – user1347219