2016-12-28 120 views
4

我有一个MySQL数据库表,其列名为"timestamp",类型为timestamp,属性为on update CURRENT_TIMESTAMP,默认值为CURRENT_TIMESTAMP如何将MySQL TIMESTAMP转换为PHP中的日期时间

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

在PHP我使用下面的查询

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

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

我是PHP和MySQL的新手,到目前为止,我看到的其他问题或文档都没有成功解决执行此转换问题。我不明白为什么strftime()无法正常工作,以及如何正确执行此操作?

+0

的可能的复制[转换MySQL的时间戳为实际的日期和时间?(http://stackoverflow.com/questions/5547252/convert-mysql-timestamp-into-actual-date-and-时间) – Tiger

+1

旁注:由于其限制,我不会使用'TIMESTAMP':*“TIMESTAMP数据类型用于包含日期和时间部分的值.TIMEESTAMP的范围为'1970-01-01 00:00 :01'UTC to **'2038-01-19 03:14:07'** UTC。“* https://dev.mysql.com/doc/refman/5.5/en/datetime.html使用'DATETIME' *“DATETIME类型用于包含日期和时间部分的值,MySQL以'YYYY-MM-DD HH:MM:SS'格式检索并显示DATETIME值。支持的范围是'1000-01-01 00: 00:00'到**'9999-12-31 23:59:59'。**“* –

+0

@Tiger那里所选的解决方案似乎...很多。我会受益于我桌子上时间戳列的不同类型吗? – Toby

回答

4

要做到这一点的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之间)。

DateTime:http://php.net/manual/en/class.datetime.php 了解它。爱它。活着吧。

1

通常在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"])); 
+0

不知道为什么这是downvoted,它可能不是OO的方式,strtotime将工作得很好为MySQL时间戳。 – Devon

0

我会用Carbon class和字符串格式化

$carbon = Carbon::instance('2016-12-28 17:02:26'); 

然后,你可以格式化你想要的方式。

+2

重要提示:Carbon是PHP DateTime API的第三方扩展。 – Devon

+0

@Devon真实但非常有用。它是如此之好,它配备了Laravel – Samuel

+0

是的,我几乎每天都在使用它。不知道为什么这是低调的,Carbon对于那些希望使用图书馆的人来说是一个很好的解决方案。 +1来恢复平衡。 – Devon

1

为什么不让MySQL做这项工作?你真的想要mm/dd/yy,而不是dd/mm/yy吗?

SELECT *, DATE_FORMAT(timestamp, '%m/%d/%y, %T') formatted_date FROM .... 

然后,您可以提取格式化的日期为$ row ['formatted_date']。

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

+0

哎呀,你是对的,我想要dd/mm/yy,谢谢。我会编辑fothwith! – Toby

+0

我有seens DATE_FORMAT()提到,但只涉及'SELECT DATE_FORMAT ...',并不知道如何适应它,我会试一试 – Toby

+0

这有效,我喜欢它的整洁,但我认为Ray的DateTime对象方法更灵活一点。 – Toby