преобразование даты и времени «strtotime ()» вопрос

#php #mysql #datetime #strtotime

#php #mysql #дата и время #strtotime

Вопрос:

Почему «strtotime ()» по-прежнему отображает дату и время, даже если таблица базы данных имеет значение null?

и как не отображать «strtotime», если таблица базы данных имеет значение null?

SQL:

 CREATE TABLE logtrail(
login_id INT(100) PRIMARY KEY AUTO_INCREMENT,
admin_id INT(100),
first_name VARCHAR(100),
last_name VARCHAR(100),
dateandtime_login  DATETIME DEFAULT CURRENT_TIMESTAMP,
dateandtime_logout DATETIME
);
 

PHP-код для отображения:

   <?php 
          $sql1 = "SELECT * FROM logtrail ORDER BY login_id DESC";
          $result1 = mysqli_query($conn, $sql1);
          $logtrail = mysqli_num_rows($result1);

          if($logtrail > 0 ){
            while($row = mysqli_fetch_assoc($result1) ) {

            $dateandtime_login = strtotime($row['dateandtime_login']);
            $dateandtime_logout = strtotime($row['dateandtime_logout']);

          ?>
          <tr>
            <td><?php echo $row['login_id'] ?></td> 
              <td><?php echo $row['admin_id'] ?></td>
              <td><?php echo $row['first_name'], $row['last_name'] ?></td>
              <td><?php echo date('F d Y', $dateandtime_login) ?></td>
              <td><?php echo date('h:i A', $dateandtime_login) ?></td>
              <td><?php echo date('h:i A', $dateandtime_logout) ?></td>
          </tr>
    <?php }} ?>
 

Ответ №1:

Проверьте, являются ли значения, возвращаемые из базы данных, пустыми. В противном случае функция даты вернет стандартную дату (31 декабря 1969 года).

Пример:

 echo ($dateandtime_login != null ? date('F d Y', $dateandtime_login) : false);
 

Ответ №2:

Есть много способов, которыми вы можете это сделать. Что вам нужно сделать, это проверить, равно ли значение null, и предоставить пустую строку по умолчанию.

Взгляните на два способа, которыми я это сделал. Первый использует if оператор, а второй использует троичный оператор. Значения подготавливаются перед отображением. Я настоятельно рекомендую никогда не смешивать логику представления и базы данных. Держите их отдельно. Для простоты я не разделил их в приведенном ниже примере.

 $sql1 = "SELECT * FROM logtrail ORDER BY login_id DESC";
$result1 = mysqli_query($conn, $sql1);

foreach ($result1 as $row):
    if ($row['dateandtime_login']) {
        $dt = new DateTime($row['dateandtime_login']);
        $row['date_login'] = $dt->format('F d Y');
        $row['time_login'] = $dt->format('h:i A');
    } else {
        $row['date_login'] = '';
        $row['time_login'] = '';
    }

    $row['dateandtime_logout'] = $row['dateandtime_logout'] ? (new DateTime($row['dateandtime_logout']))->format('h:i A') : '';
?>
    <tr>
        <td><?php echo $row['login_id'] ?></td>
        <td><?php echo $row['admin_id'] ?></td>
        <td><?php echo $row['first_name'], $row['last_name'] ?></td>
        <td><?php echo $row['date_login'] ?></td>
        <td><?php echo $row['time_login'] ?></td>
        <td><?php echo $row['dateandtime_logout'] ?></td>
    </tr>
<?php
endforeach;
 

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

1. Я не считаю правильным использовать класс DateTime в этом коде. Форматирование желаемой даты здесь. Для этого мы должны использовать функции форматирования, не включая целый класс. Я использую класс DateTime в основном с методом modify, чтобы сделать код более читаемым.

2. @sercanarga я не понимаю, что вы имеете в виду. DateTime класс заменил strtotime и date . Какая возможная причина может быть для использования более ограниченной функциональности? Я не чувствую себя вправе предлагать в своих ответах старые функции, если только это не для чего-то действительно тривиального. В этом случае я считаю DateTime , что class — лучший выбор.

3. Производительность. Для этого кода нет необходимости создавать целый класс.

4. Я не думаю, что разница в производительности будет достаточно большой, чтобы ее можно было заметить, если она вообще есть. Я считаю, что преимущества перевешивают любые потенциальные и крошечные затраты на производительность