我在秒内具有偏移量,数据库中存储的所有时间戳均在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为您处理这一切。