在php中从数据库中显示正确的DateTime


Display correct DateTime from db in php

我的日期-时间表示有问题。我想在一个列表中显示进入数据库的条目的时间,旁边有条目的标题。但目前,每当我试图正确格式化时间时,代码只显示一个条目,而不是所有条目。

<?php
    $result = mysql_query("SELECT * FROM posts");
    while ($row = mysql_fetch_array($result)){  
        echo "<li>{$row["date"]}". "&nbsp; &nbsp; &nbsp; &nbsp;". $row["title"]. "</li>";
    }
?>

像这样,它显然只是显示数据库中的内容:

2014-09-08 07:09:24.476246       this is it !!
2014-09-05 06:20:20.317560       So nun endlich die Website online

但当我以这种方式格式化日期时。。。

<?php
    $result = mysql_query("SELECT * FROM posts");
    $new_date = mysql_fetch_row($result);
    $date = date_create($new_date[3]);
    while ($row = mysql_fetch_array($result)){  
        echo "<li>". date_format($date, 'Y-m-d H:i:s'). "&nbsp; &nbsp; &nbsp; &nbsp;". $row["title"]. "</li>";
    }
?>

我只从数据库中得到最后一行。

尝试在循环中直接使用date()进行格式化,这样就不需要$date var

echo "<li>".date('Y-m-d H:i:s', strtotime($row["date"]))."&nbsp; &nbsp; &nbsp; &nbsp;". $row["title"]. "</li>";

或者只制作

 $date = date_create($new_date[3]);

环路内

此外,mysql_*已被弃用,以获得更多关注@john Conde答案。

通过在循环外调用mysql_fetch_row(),您将弹出堆栈中记录集的第一条记录,只留下第二条记录。只需在循环中创建DateTime()对象。

<?php
    $result = mysql_query("SELECT * FROM posts");
    while ($row = mysql_fetch_array($result)){  
        $date = date_create($row[3]);
        echo "<li>". date_format($date, 'Y-m-d H:i:s'). "&nbsp; &nbsp; &nbsp; &nbsp;". $row["title"]. "</li>";
    }
?>

我也不建议在访问相同数据时混合使用数字键和关联键。坚持一个。我推荐关联数组,因为它们对读者来说更清楚发生了什么

<?php
    $result = mysql_query("SELECT * FROM posts");
    while ($row = mysql_fetch_assoc($result)){  
        $date = date_create($row['date_col']);
        echo "<li>". date_format($date, 'Y-m-d H:i:s'). "&nbsp; &nbsp; &nbsp; &nbsp;". $row["title"]. "</li>";
    }
?>

请不要在新代码中使用mysql_*函数。它们不再被维护,并被正式弃用。看到红盒子了吗?了解准备好的语句,并使用PDO或MySQLi-本文将帮助您决定哪一个。如果你选择PDO,这里有一个很好的教程。