2

有很多关于处理日期的建议。我只是想澄清一点。比方说:

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

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

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

我知道使用 PHP 可以做到这一点,但在这种情况下不需要关心 mysql 的时区设置——只有 php 的。该系统将是 64 位的,因此存储日期的空间不足不是问题。但 ...

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

4

2 回答 2

2

Unix 时间戳与时区无关。

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

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

进入这个:

将值转换为 Unix 时间戳

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

  • 使用FROM_UNIXTIME()MySQL 的函数保存值(将 Unix 时间戳作为参数,您将根据 MySQL 的设置接收日期时间),
  • 通过使用UNIX_TIMESTAMP()MySQL 的函数检索值(将字段名称或值作为参数),因此您将根据 MySQL 的设置在数据库中存储的 datetime 获得 Unix 时间戳(整数)。

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

于 2012-09-21T11:19:07.793 回答
0

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

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

于 2012-09-21T11:30:42.470 回答