从MySQL数据库中获取UNIX TIMESTAMP,并应用了偏移



我在秒内具有偏移量,数据库中存储的所有时间戳均在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转换为选择中的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每次对转换值进行检查时要"转换"。

我认为您可能会过度复杂问题。

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

例如,当您使用date()函数转换时区时,它以任何时区显示php.ini设置日期。

因此,如果您的用户具有特定的时区,只需在当地时代显示日期之前与适当的时区致电date_default_timezone_set()

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

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

相关内容

  • 没有找到相关文章

最新更新