PHP strtotime возвращает дату 1970 года, когда столбец даты пуст - PullRequest
12 голосов
/ 12 октября 2011

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

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

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

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

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

Sandeep

Ответы [ 4 ]

19 голосов
/ 12 октября 2011

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

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

8 голосов
/ 12 октября 2011

NULL конвертируется в 0 - эпоху (1-1-1970)

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

echo "<td align=center>".($row->depositdate ? date('d-m-Y', strtotime($row->depositdate)) : '')."</td>";
0 голосов
/ 09 июня 2015

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

$sql = "SELECT * FROM `yourtable`";
0 голосов
/ 12 октября 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 (количество секунд с 1 января 1970 года 00:00:00 UTC), относительно отметки времени, указанной в now, или текущего времени, если сейчас не указано.

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

...