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

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

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

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

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

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

Сандип


person Sandy505    schedule 12.10.2011    source источник
comment
Затем проверьте, является ли значение нулевым, и если это так, не ожидайте, что функция date сделает вашу работу за вас - отобразите пустую строку, в противном случае отобразите вывод функции date.   -  person N.B.    schedule 12.10.2011


Ответы (4)


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

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

person GolezTrol    schedule 12.10.2011

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

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

echo "<td align=center>".($row->depositdate ? date('d-m-Y', strtotime($row->depositdate)) : '')."</td>";
person Ed Heal    schedule 12.10.2011

Вам необходимо проверить, является ли $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('d-m-Y', $jUnixDate);
     }
  }
  echo "</td>";

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

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

person corretge    schedule 12.10.2011

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

$sql = "SELECT * FROM `yourtable`";
person Param Lowe    schedule 09.06.2015
comment
Откуда вы знаете, что я не включил дату депозита в запрос SELECT? Пожалуйста, внимательно прочитайте вопрос..... - person Sandy505; 03.04.2016