PHP strtotime возвращает дату 1970 года, когда столбец даты равен нулю

Я хочу отобразить $ row-> depositdate в формате dd-mm-yyyy.

Если столбец даты в базе данных равен нулю, отображается следующая дата: 01-01-1970

echo "<td align=center>".date('dm-Y', strtotime($row->depositdate))."</td>"; 

Если дата в базе данных не указана, она не должна отображать ничего, иначе должна отображаться дата в формате dd-mm-yyyy.

заранее спасибо

Sandeep

NULL интерпретируется как 0 strtotime, так как он хочет передать целочисленную временную метку. Временная метка 0 означает 1-1-1970.

Поэтому вам придется проверять себя, если $row->depositdate === NULL , и если да, не вызывайте strtotime вообще.

NULL преобразуется в 0 – эпоху (1-1-1970)

Сделайте это вместо этого

 echo "<td align=center>".($row->depositdate ? date('dm-Y', strtotime($row->depositdate)) : '')."</td>"; 

Вам нужно проверить, было ли $ row-> depositdata is_null ранее или проверить значение 0 после strtotime, если значение $ row-> depositdata неузнаваемо для strtotime.

  echo "<td align=center>"; if (!is_null($row->depositdate)) { $jUnixDate = strtotime($row->depositdate)); if ($jUnixDate > 0) { echo date('dm-Y', $jUnixDate); } } echo "</td>"; 

strtotime ожидает получить строку, содержащую формат даты на английском языке, и попытается проанализировать этот формат в временную метку Unix (количество секунд с 1 января 1970 года 00:00:00 по UTC) по сравнению с меткой времени, указанной в настоящее время, или текущее время, если теперь не предоставляется.

подробнее о unixtime и проблемах Y2K38: http://en.wikipedia.org/wiki/Year_2038_problem

Ой! Я знаю, почему это происходит? Просто вы не включили «depositdate» в свой запрос SELECT. Сначала измените SQL-запрос, чтобы выбрать все с символом wild card, как показано здесь.

 $sql = "SELECT * FROM `yourtable`";