如何在PHP中将MySQL TIMESTAMP转换为日期时间

Tob*_*oby 6 php mysql datetime timestamp formatdatetime

我有一个MySQL数据库表,其中包含一个名为的列"timestamp",一个类型timestamp,以及on update CURRENT_TIMESTAMP默认值为的属性CURRENT_TIMESTAMP.

如果我向表中添加一条记录,指定其他值,而不是时间戳,则会自动添加时间戳2016-12-28 17:02:26.

在PHP中,我使用以下查询查询表

SELECT * FROM history WHERE user_id = 9 ORDER BY timestamp ASC
Run Code Online (Sandbox Code Playgroud)

查询的结果保存到$rows我使用a foreach来创建一个数组,其中一些其他值格式化.我正在尝试将时间戳格式化为英国式24小时日期时间:dd/mm/yy, HH:MM:SS.

我已经尝试了以下两个date()strftime()函数:

$formatted_datetime = strftime("%d %m %y  %H %M %S", $row["timestamp"]); 
$formatted_datetime = date("d/m/y, H:i:s", $row["timestamp"]);
Run Code Online (Sandbox Code Playgroud)

这两个都导致以下通知和输出日期时间不正确,如01 01 70 00 33 36:

注意:第20行/home/ubuntu/workspace/pset7/public/history.php中遇到的格式不正确的数值

我是PHP和MySQL的新手,到目前为止我见过的所有其他问题或文档都没有成功解决过这种转换.我不明白为什么strftime()不起作用,也不知道如何正确地做到这一点?

Ray*_*Ray 7

要做到这一点,OO(和最灵活的)方式使用DateTime类并使用静态createFromFormat方法来实例化一个新DateTime对象:

$new_datetime = DateTime::createFromFormat ( "Y-m-d H:i:s", $row["timestamp"] );
Run Code Online (Sandbox Code Playgroud)

现在,您可以$new_datetime通过调用对象的format方法使用该对象生成您想要的任何字符串表示:

echo $new_datetime->format('d/m/y, H:i:s');
Run Code Online (Sandbox Code Playgroud)

要启动,你既然有了一个DateTime对象,你现在也可以进行任何转换(比如移动时区或添加天),比较(大于或小于另一个DateTime),以及各种时间计算(多少天/月/等). ..在这个和另一个之间DateTime).

DateTime:http://php.net/manual/en/class.datetime.php 学习它.爱它.住它.


小智 5

通常,在 MySQL 日期时间戳将时间保存为YYYY-MM-DD HH:MM:SS (2016-12-20 18:36:14)格式中,您可以使用日期格式轻松地将它们转换为您希望的格式,但必须首先将输入转换为时间。下面就可以解决问题了

$formatted_datetime = date("d/m/y, H:i:s", strtotime($row["timestamp"]));
Run Code Online (Sandbox Code Playgroud)