php - 如何正确存储和使用不同时区的MySQL TIMESTAMP?

标签 php mysql

我正在创建一个基于安排约会的应用程序,在用户可以选择所需时区的环境中。

经过一些研究,我确信使用MYSQL的TIMESTAMP存储所有日期。我认为,当使用TIMESTAMP时,所有日期都将转换并存储为 UTC。然后,一个TIMESTAMP从数据库中提取日期时,列将转换为 MYSQL 的时区。

下面是我当前设置的一些示例代码:

在每个页面上,为 PHP 和 MYSQL 设置时区(基于用户选择。本例为 PST):

date_default_timezone_set('US/Pacific');
SET time_zone = '-08:00'

当将时间放入 MYSQL 时,我只需将时间戳转换为正确的格式即可。

date("Y-m-d H:i:s", $unix_timestamp);

从数据库中提取数据时,我只需使用 MYSQL 转换为 UNIX。

SELECT UNIX_TIMESTAMP(created_at) as created_at FROM `table` WHERE id=1

这很优雅,而且似乎工作得很好。 MySQL 为我完成了时区转换的所有繁重工作,只需使用 TIMESTAMP 。也就是说,直到夏令时发生。现在,只要选择非 UTC 时区,时间就会休息一小时

我在做什么,错了吗?请帮忙!

最佳答案

如果您使用;

date_default_timezone_set('US/Pacific');
SET time_zone = '-08:00'

...由于 PDTGMT-07:00,因此在夏季,MySQL 的服务器时区将比太平洋时间晚一小时。相反,使用例如;

date_default_timezone_set('US/Pacific');
SET time_zone = 'America/Los_Angeles';

...MySQL 的服务器时间将支持 DST 更改,您应该获得正确的时区转换。

由于 MySQL 并不总是包含所有可用时区,因此如果您的系统中缺少时区 America/Los_Angelesthis page should help you install it .

由于您为每个用户使用动态时区,因此您可能需要某种查找表来在 MySQL 和 PHP 时区之间进行转换,以便您可以为每个用户设置正确的时区。

关于php - 如何正确存储和使用不同时区的MySQL TIMESTAMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353829/

相关文章:

php - bool 值错误 - mysqli

mysql - 加速 Rails 中的查询

MySQL 排序依据 - IN

php - 非动态数据的翻译

php - 如何使用 PHP 获取 CSV 文件中的总行数?

javascript - 下载文件时禁止打开弹出窗口

javascript - 单选按钮值未传递给变量并停止提交

高尔夫比分的 mySQL 数据库模式

mysql - [FireDac][物理][MySQL]-1101。不支持的 MySQL 版本 [0]。支持从 v 3.20 到 v6.2 的客户端和服务器

php - mysql重用自动递增id