10

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

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

以下是我的问题:

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

4 回答 4

5

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

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

当您将其从数据库中拉出时,使用 strtotime() 对其进行转换,然后您可以使用所有 date() 功能以任何您想要的方式显示它。例子:

echo date('F j, Y',strtotime($db_datetime)); //Displays as 'March 5, 2012'
于 2012-08-02T18:39:27.157 回答
1

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

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

于 2012-08-02T18:40:34.143 回答
1

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

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

于 2012-08-02T18:45:53.660 回答
1

我多年来一直在为这个问题苦苦挣扎,我开始认为最好的方法可能是将时间存储为代表 Unix 时间的整数(从 1970 年 1 月 1 日开始的秒数)。我已经这样做了,而且效果很好。

就我个人而言,我从未使用过日期时间,而且我想不出我会使用它的情况。它只是带来了太多的问题。

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

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

于 2021-11-28T21:32:46.683 回答