3

我找到了解决我的“问题”的正确方法,但即使在阅读了 mysql 页面之后,我也不明白它背后的逻辑。

我目前将注册信息存储在我的系统中的一个表中的“日期时间”格式字段中(YYYY-MM-DD hh:mm:ss)

当我想在我的一个 php 页面上显示数据时,只需发布​​确切的字段数据即可显示上述格式。

我会认为只需使用date("Y-m-d",$row["DATE"])对应$row["DATE"]于特定行值的位置将返回所需的格式。

相反,我必须使用:date("Y-m-d", strtotime($row["DATE"]))

为什么是这样?我的$row["DATE"]字段首先不是字符串。我应该能够简单地重新排列存储在日期时间字段中的数据吗?这不是重建我的整个表集以适应日期时间的目的吗?

4

2 回答 2

5

MySQL 有一个名为date_format的内置函数,您可以使用它来显示您想要的日期。

SELECT DATE_FORMAT(date_field, '%Y-%m-%d') as date_field FROM table_name

该手册有格式列表和以这种方式显示它所需的变量。使用这种方法将不需要 PHP 转换它等。另外,PHP 端的代码更少,MySQL 可以轻松处理。

编辑

抱歉,刚刚读到您正在寻找解释。

PHP 的date函数接受一个 UNIX 时间戳,MySQL 没有使用它。MySQL 使用真正的日期格式 IE: YYYY-MM-DD HH:MM:SS,如您所知,这将在多年后兼容。UNIX 时间戳的有效范围有限,从 1969 年到 2037 年,这使得它对于项目的“时间戳”非常有用,例如聊天框消息或它们在这些日期后预计不会出现的项目,其中因为 MySQLDATETIME不应该消亡,直到年份变为 5 位数或世界末日。

阅读 WIKI on UNIX 时间戳了解更多信息。

于 2010-09-22T16:11:22.153 回答
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 年之后的日期,它可能不合适,但对于今天的日常使用来说,它很棒。

在日期字符串上使用时间戳的主要优点是可以添加和减去时间戳,这对于字符串格式的日期要困难得多。

于 2010-09-23T08:20:51.763 回答