MySQL datetime 转换为 PHP

3
我已经找到了解决我的“问题”的合适方案,但即使在阅读mysql页面后,我也不明白其背后的逻辑。
目前我在系统中使用一个表的“datetime”格式字段存储注册信息 (YYYY-MM-DD hh:mm:ss)
当我想在我的php页面上显示数据时,只需发布确切的字段数据即可显示上述格式。
我认为只要使用date("Y-m-d",$row["DATE"]),其中$row["DATE"]对应于特定行值,就会返回所需的格式。
但实际上我必须使用:date("Y-m-d", strtotime($row["DATE"]))
这是为什么呢?我的$row["DATE"]字段本身不是一个字符串。我应该能够简单地重新排列以日期时间形式存储的数据,这不是重建整个表集以适应datetime的目的吗?
2个回答

5
MySQL有一个内置函数叫做date_format,您可以使用它来以您想要的方式显示日期。
SELECT DATE_FORMAT(date_field, '%Y-%m-%d') as date_field FROM table_name

手册中列出了格式和变量的清单,以显示所需的方式。使用这种方法,就不需要让PHP进行转换等操作。此外,对于MySQL可以轻松处理的事情,PHP端的代码更少。 编辑 抱歉,刚刚看到您正在寻找解释。
PHP的date函数接受UNIX时间戳,而MySQL没有使用它。MySQL使用真实的日期格式,即:YYYY-MM-DD HH:MM:SS,正如您所知,这是为了符合未来的年份。UNIX时间戳的有效范围有限,从1969年到2037年,非常适用于时间戳的项目,例如聊天框消息或预计在这些日期之后不存在的项目,而MySQL的DATETIME应该不会过时直到年份更改为5位数或世界末日。
阅读UNIX时间戳上的WIKI,获取更多信息。

2

MySQL允许您选择Unix时间戳格式的日期,这使它们更容易在PHP中使用,正如您所请求的那样。

前面的答案似乎忽略了这一点,或者由于Unix时间戳的范围限制而对其进行了贬低,但如果这正是你要寻找的...

SELECT UNIX_TIMESTAMP(datefield) as u_datefield FROM table

这将以时间戳格式提供日期,您可以像在PHP中建议的那样使用:

<?php
$showdate = date("Y-m-d",$row['u_datefield']);
?>

正如前面的回答所提到的,Unix时间戳的范围是有限的,因此如果你需要1970年以前或2038年之后的日期,则可能不适用,但在今天的日常使用中非常好。

使用时间戳而不是日期字符串的主要优点是时间戳可以相加和相减,而使用日期字符串更难实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接