0

我有以秒为单位的 UTC 偏移量,存储在数据库中的所有时间戳都是 UTC,如何在选择查询期间应用偏移量,

mysql_query("SELECT * FROM table WHERE unix_timestamp=unix_timestamp with offset applied");

mysql_query("INSERT INTO table (unix_timestamp) VALUES(UNIX_TIMESTAMP())");

我想将UTC时间插入数据库并在本地时间检索。

在 PHP 上:

date_default_timezone_set('UTC');

$user_timezone_offset=-7200; // -2

我可以将 select 的 mysql 运行时减去 unix_timestamp 字段 $user_timezone_offset 吗?

我正在插入 UTC,这显然是我需要的,但是对于用户本地时间的选择,我需要以某种方式将偏移量应用于存储在数据库中的时间戳。

编辑:我刚遇到这个:

$user_timezone_offset="-2:00";

FROM_UNIXTIME(CONVERT_TZ(unix_timestamp,'+00:00','$user_timezone_offset'))

需要知道如何将其应用于选择查询,从而将 unix_timestamp 的选择转换为在选择内进行比较,并且结果也被修改为 php 的 fetch_array

这似乎是解决方案:

 SELECT *, Unix_Timestamp(CONVERT_TZ(FROM_UNIXTIME(unix_timestamp), '+00:00', '$user_timezone_offset')) as unix_timestamp

实际上这有一个问题 - 虽然在

 mysql_fetch_array($result){ $row['unix_timestamp']; }

在检查时转换

  WHERE unix_timestamp=value //assuming unix_timestamp

在选择上进行转换-在那里它没有被转换,另一个

  Unix_Timestamp(CONVERT_TZ(FROM_UNIXTIME(unix_timestamp), '+00:00', '$user_timezone_offset')) 

每次要对转换后的值进行检查时,都必须调用 unix_timestamp 进行“转换”。

4

1 回答 1

1

我认为您可能使问题过于复杂。

时间戳始终为 UTC。当您在 PHP 中检索时间戳时,它是 UTC 格式的。

例如,当您使用该date()函数转换时区时,它会显示在 php.ini 设置date.timezone设置为的任何时区。

因此,如果您有具有特定时区的用户,只需date_default_timezone_set()在显示本地时间日期之前使用适当的时区进行调用。

如果您使用DateTime类,那么您可以在构造对象时指定所需的时区。

除非您有非常具体的原因,否则当您从数据库中获取时间戳时,不需要执行时区转换。PHP 为您处理这一切。

于 2012-11-07T19:52:52.853 回答