我想将用户在我的网站上执行操作的日期和时间存储到MySQL数据库中。我希望能够轻松地完成以下工作:
- 将日期和时间作为一个字段存储在数据库中
- 使用内置的PHP或MySQL函数生成操作的日期时间
- 根据服务器的时间存储日期时间,不用担心用户时区
Order By
查询MySQL时的日期-时间字段- 稍后,使用内置的PHP方法以多种不同的格式显示日期时间
以下是我的问题:
- MySQL中应该使用什么数据类型(例如
timestamp
、datetime
…) - 我应该使用什么方法来生成日期时间(例如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()函数。日期时间将始终根据服务器的时间存储,而不是根据客户端的时间存储。