我有一个MySQL数据库表,其中包含一个名为“timestamp”的列,一种时间戳,以及更新时CURRENT_TIMESTAMP和默认值CURRENT_TIMESTAMP的属性.
如果我向表中添加记录,指定其他值,但不指定时间戳,则会自动添加时间戳,如2016-12-28 17:02:26.
SELECT * FROM history WHERE user_id = 9 ORDER BY timestamp ASC
查询的结果保存到$rows中,我使用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"]);
这两个都导致以下通知和日期时间错误输出,如01 01 70 00 33 36:
Notice: A non well formed numeric value encountered in /home/ubuntu/workspace/pset7/public/history.PHP on line 20
我是PHP和MysqL的新手,到目前为止,我见过的所有其他问题或文档都没有成功地解决了执行此转换的问题.我不明白为什么strftime()不起作用,也不知道如何正确地执行此操作?
最佳答案
为此,OO(以及最灵活的)方式使用DateTime类并使用静态createFromFormat方法来实例化新的DateTime对象:
$new_datetime = DateTime::createFromFormat ( "Y-m-d H:i:s",$row["timestamp"] );
现在,您可以使用$new_datetime对象通过调用对象的format方法生成您想要的任何字符串表示:
echo $new_datetime->format('d/m/y,H:i:s');
要启动,你既然有了DateTime对象,你现在也可以进行任何转换方式(如移动时区或添加天数),比较(大于或小于另一个DateTime),以及各种时间计算(多少天/月/月)等……在这个和另一个DateTime之间).
日期时间:http://php.net/manual/en/class.datetime.php
学习它.爱它.住它.