PHP可以安全地使用unix时间戳来查询mysql数据库吗?

Can PHP safely use unix timestamps to query mysql database?

关于处理日期有很多建议。我想澄清一下。假设:

  • 用户正在将记录插入数据库
  • 为该记录生成插入日期的Unix时间戳

现在,用户希望查询数据库中的日期间隔:

  • 用户在其本地时区中提供2个日期
  • 使用这些值将时区转换为UTC并获取时间戳
  • 根据转换后的2个整数查询数据库中的记录(例如,其中日期大于等于第一个,日期小于等于第二个)
  • 再次将检索到的时间戳转换为本地时区进行显示

我知道这在PHP中是可能的,但在本例中不需要关心MySQL的时区设置——只有PHP。系统将是64位的,因此存储日期的空间不足不是问题。但是…

这是否会引发其他严重问题,如DST变更或其他问题?


Unix时间戳与时区无关。

这也是您可以更改此步骤的原因:

use these values to convert timezone to UTC and get the timestamp

在这方面:

convert values to Unix timestamp

尽管在数据库(如mysql)中存储时间戳非常简单。如果要执行以下操作,可以确保php具有unix时间戳:

  • 使用FROM_UNIXTIME()mysql函数保存值(给unix timestamp作为参数,根据mysql的设置接收datetime)。
  • 使用UNIX_TIMESTAMP()mysql函数(给出字段名或参数值)检索值,根据mysql的设置,根据数据库中存储的日期时间获取unix时间戳(integer)。

只需记住使用TIMESTAMP列类型来存储时间戳。这样,时间将以独立于时区的方式存储,仅根据MySQL的设置显示。


t检查Unix时间戳是否与时区无关是正确的。

但是,在整个应用程序中使用时间戳时,您应该将数据库中的时间戳作为纯整数存储和使用。在应用程序级别(在PHP中)转换为本地时区或从本地时区转换。这允许您只关注PHP中的时区,而不关注2个系统中的时区。它还简化了在应用程序级别为单个用户设置时区的过程。