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

时间:2012-09-21 11:15:21

标签: php mysql timezone

有很多关于处理日期的建议。我想澄清一些事情。让我们说:

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

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

  • 用户在当地时区提供2个日期
  • 使用这些值将时区转换为UTC并获取时间戳
  • 根据转换中的2个整数查询数据库中的记录(例如,WHERE日期> = FIRST和日期< = SECOND)
  • 将检索到的时间戳再次转换为本地时区以进行显示

我知道用PHP可以实现,但在这种情况下不需要关心mysql的时区设置 - 只有php的。系统将是64位,因此用尽存储日期的空间不是问题。但是......

这是否会引发任何其他严重问题,例如DST更改或其他什么?

2 个答案:

答案 0 :(得分:2)

Unix时间戳与时区无关。

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

  

使用这些值将时区转换为UTC并获取时间戳

进入这个:

  

将值转换为Unix时间戳

虽然在数据库中存储时间戳(例如MySQL)非常简单。您可以确保PHP具有Unix时间戳,如果您将:

  • 使用FROM_UNIXTIME() MySQL的函数保存值(将Unix时间戳作为参数,您将根据MySQL的设置接收日期时间),
  • 使用UNIX_TIMESTAMP() MySQL的函数检索值(给出字段名称或值作为参数),这样你就可以根据存储在数据库中的日期时间得到Unix时间戳(整数)根据MySQL的设置。

请记住使用TIMESTAMP列类型来存储时间戳。这样,时间将以与时区无关的方式存储,仅根据MySQL的设置显示。

答案 1 :(得分:0)

Tadeck是正确的,Unix时间戳与时区无关。

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