0

我一直在研究 MySQL 的 DATETIME 和 TIMESTAMP 在使用上的差异。DATETIME 似乎很简单。我会使用以下程序:

  1. 为所有日期选择默认时区,例如 UTC。
  2. 让用户从下拉列表中选择日期。
  3. 使用用户的时区设置(例如 EST)创建具有所选日期的新 PHP DateTime 对象。
  4. 将对象转换为 UTC,并插入数据库。
  5. 在另一个页面上,检索日期时间值并使用它创建一个新的 DateTime 对象,使用 UTC 时区。
  6. 将对象转换为用户的本地时间 (EST),并显示给他。

现在,似乎 mysql 的 TIMESTAMP 列类型可以帮助消除所有这些转换。

  1. 如果使用 TIMESTAMP 列类型,上述步骤会是什么样子?
  2. 我需要做“SET time_zone = timezone;”吗 在每个页面加载开始时将时区设置为用户的位置?
  3. 每个数据库只使用一种日期列类型会更容易吗?如果不是,它可能需要两组不同的函数来生成正确的日期。
  4. TIMESTAMP 是否应该只用于不打算向公众显示的列中(以免处理格式)?就像创建行、上次编辑等时一样。
4

1 回答 1

0

我没有测试过任何这种方法,但它看起来很简单=)

  1. 您不需要转换日期,只需在从 dB 读取/写入时设置时区即可使一切正确。
  2. 是的,您必须在连接到 dB 后设置正确的时区。
  3. 你的意思是只使用日期时间或时间戳?这实际上取决于您打算如何使用这些列。但没有明确的必须做的事情
  4. 与上面相同,从 dB 格式化数据并没有错,使用时间戳可以从 dB 返回日期样式字符串,所以不用担心

传统上,时间戳像您提到的那样与其他日期相关联,而日期时间则与其他日期相关联。

有关语言环境/时区的更多信息: MYSQL 在 PHP 代码中设置时区

于 2013-03-13T21:15:45.980 回答