转换日期和时间"strtotime()"问题



为什么"strtotime()"即使数据库表为空,仍然显示日期和时间?

如何不显示"strtotime"如果数据库表为空?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 }} ?>

检查数据库返回的值是否为空。否则,date函数将返回标准日期(1969年12月31日)。

示例:

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

有很多方法可以做到这一点。您需要做的是检查该值是否为空,并提供一个默认的空字符串。

看看我做过的两种方法。第一个使用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;