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

#php #date-format #strtotime

#php #формат даты #strtotime

Вопрос:

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

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

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

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

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

Sandeep

Комментарии:

1. Затем проверьте, равно ли значение null, и если это так, не ожидайте date , что функция выполнит вашу работу за вас — отобразите пустую строку, в противном случае отобразите date вывод функции.

Ответ №1:

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

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

Ответ №2:

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

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

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

Ответ №3:

Вам нужно проверить, является ли значение $row->depositdata значением_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, или текущего времени, если now не указано.

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

Ответ №4:

 I am able to insert value into DB (SQL Server -- Microsoft) with PHP and value stored is: 2021-03-25 22:45:00

When I trying to fetch the value from DB:

 $db = trim($row_table['db_timestamp']);
 $timestamp = strtotime('m-d-y',$db);
 echo date("m-d-Y H:i:s", $timestamp);

output is : 01-01-1970 05:30:00
  

Ответ №5:

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

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

Комментарии:

1. Откуда вы знаете, что я не включил «depositdate» в запрос ВЫБОРА? Пожалуйста, внимательно прочитайте вопрос …..