2012-05-05 3 views
3

В цикле while как я могу показать дату если эта дата существует?Проверить, нет ли даты

E.g .: Если дата 0000-00-00, ничего не отображайте.

Я сейчас читаю дату следующим образом, но я получаю 01-01-1970 когда 0000-00-00:

date('d-m-Y', strtotime($row['date'])) 

ответ

2

Вы должны сначала проверить, какие есть в поле даты, содержит ли он дату или ее NULL. По результатам вы можете прочитать дату.

while($row = mysql_fetch_array($result)){ 

if(strtotime($row['date'])!='0000-00-00'){ 
mydate = date('d-m-Y', strtotime($row['date'])); 
}else{ 
mydate =''; 
} 
} 
+0

Проблема заключается в том, что у меня есть это while ($ row = mysql_fetch_array ($ result)) {date ('dm-Y', strtotime ($ row ['date_out']))} так как я могу сделать условие if каждый раз для каждого цикла – user1347219

+0

см. Я отредактировал свой ответ. Вы можете проверить условие во время цикла. – Dhruvisha

+0

после того, как я попытался изо всех сил. Я все еще показываюсь 01-01-1970 Я сделал следующее: if (strtotime ($ row ['date'])! = '0000-00-00') { $ mydate = date (' dm-Y ', strtotime ($ row [' date '])); } else { $ mydate = ''; } и в качестве вывода Я эхо отзыва $ mydate – user1347219

1

Попробуйте

foreach($row As $rows){ 
if(strtotime($rows['date']) == ''){ 
    echo "N/A"; 
    }else{ 
echo date('d-m-Y', strtotime($rows['date'])); 
} 
echo "<br/>"; 

}

strtotime of "0000-00-00" AND "" is equal to "".

+3

не так ли? Я думаю, вы ошибаетесь. 'strtotime ('0000-00-00')' дает '-62169984000' для меня – ianbarker

4

попробовать это, его работа для меня

while($row = mysql_fetch_array($result)){ 
if(strtotime($row['date']) > 0){ 
    echo date('d-m-Y', strtotime($row['date'])); 
}else{ 
    echo 'Date not valid or null'; 
} 
} 
+0

Это проверяет, соответствует ли дата после 1 января 1970 года. Даты раньше, чем это, будут эхом как недействительными, даже если это действительная дата. – ffork

1

Что вы можете сделать, это заменить все 0, -, : и значения из строки даты или даты и времени, если это пусто.

if (empty(str_replace(array("0", "-", ":", " "), "", $mydate))) 
{ 
    echo "empty date"; 
} 
else 
{ 
    echo "not empty date"; 
} 
2

В настоящее время принят неверный ответ. Он проверяет результат 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 года.