【问题标题】:Get unix timestamp from mysql database with offset applied从mysql数据库中获取unix时间戳并应用偏移量
【发布时间】:2012-10-27 20:37:03
【问题描述】:

我有以秒为单位的 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 的选择转换为在 select 中进行比较,并且结果也会针对 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 进行“转换”。

【问题讨论】:

  • 为什么要在mySQL中做这个,你用什么查询数据库就不能做计算吗?

标签: mysql time timestamp utc convert-tz


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 我也有这个问题。我按天聚合数据,结果集是 key = dayte_timestamp 和 value = some_value 的关联数组,当我想直接从 PHP 中命中数组元素时,我遇到了时区问题,因为 MySQL 添加了时区偏移
猜你喜欢
  • 2018-09-11
  • 2012-08-24
  • 2010-12-04
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多