有人可以澄清一下MySQL的TIMESTAMP如何与PHP的DateTime类结合使用吗?



我一直在研究MySQL的DATETIME和TIMESTAMP在使用上的差异。DATETIME似乎非常直接。我将使用以下步骤:

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

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

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

我还没有测试过这种方法,但它似乎很简单=)

  1. 你不需要转换日期,只需要在你需要的时候设置时区
  2. 是的,你必须在连接dB后设置正确的时区。
  3. 你的意思是只使用日期时间或时间戳?这取决于你打算怎么做使用列。但是没有一个明确的必须做
  4. 和上面一样,从dB格式化你的数据并没有错,用时间戳你可以从dB返回日期风格字符串,所以不用担心

传统的时间戳与你提到的相关联,而datetime与其他日期相关联。

更多关于地区/时区的信息:MYSQL设置时区

最新更新