什么';这是将日期和时间存储在MySQL数据库中以便稍后使用PHP显示的最佳方式


What's the best way to store date and time in a MySQL database for later display with PHP?

我想将用户在我的网站上执行操作的日期和时间存储到MySQL数据库中。我希望能够轻松地完成以下工作:

  • 将日期和时间作为一个字段存储在数据库中
  • 使用内置的PHP或MySQL函数生成操作的日期时间
  • 根据服务器的时间存储日期时间,不用担心用户时区
  • Order By查询MySQL时的日期-时间字段
  • 稍后,使用内置的PHP方法以多种不同的格式显示日期时间

以下是我的问题:

  • MySQL中应该使用什么数据类型(例如timestampdatetime…)
  • 我应该使用什么方法来生成日期时间(例如MySQL的now()、PHP的date()…)
  • 我以后应该使用什么PHP方法以各种漂亮的方式格式化日期时间(例如,2012年4月23日,2012年7月星期一下午5点…)

我会将其存储为日期时间,而不是时间戳。

我通常使用PHP日期函数,这样,如果你想存储相对于用户时区的时间,你可以简单地根据用户的设置更改时区。

当你把它从数据库中提取出来时,使用strtotime()来转换它,然后你可以使用所有的date()功能来显示它。示例:

echo date('F j, Y',strtotime($db_datetime)); //Displays as 'March 5, 2012'

多年来,我一直在努力解决这个问题,我开始认为最好的方法可能是将时间存储为表示Unix时间的整数(1970年1月1日起的秒数)。我做了这个,效果很好。

就我个人而言,我从未使用过约会时间,我想不出在什么情况下我会使用这个时间。它的问题太多了。

时间戳要好得多,但在MySQL中,它不能存储晚于2032的日期。

我很想听到一些关于这个话题的严肃讨论,但Stack Overflow可能不是最好的地方。

如果您将mysql数据类型设置为不可为null的时间戳,然后为该列保存具有null值的行,mysql将自动为您更新时间戳。

至于再次读取,您可以使用php的strtotime和date对象将其转换为所需的格式。

您应该使用datetime数据类型来满足您的需求。它将根据您的查询存储输入字段中的日期和时间。

为了检索日期时间,可以使用mysql的date_format()函数或PHP的date()函数。日期时间将始终根据服务器的时间存储,而不是根据客户端的时间存储。