我正在创建一个基于安排约会的应用程序,在用户可以选择所需时区的环境中。
经过一些研究,我确信使用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'
...由于 PDT
为 GMT-07:00
,因此在夏季,MySQL 的服务器时区将比太平洋时间晚一小时。相反,使用例如;
date_default_timezone_set('US/Pacific');
SET time_zone = 'America/Los_Angeles';
...MySQL 的服务器时间将支持 DST 更改,您应该获得正确的时区转换。
由于 MySQL 并不总是包含所有可用时区,因此如果您的系统中缺少时区 America/Los_Angeles
,this page should help you install it .
由于您为每个用户使用动态时区,因此您可能需要某种查找表来在 MySQL 和 PHP 时区之间进行转换,以便您可以为每个用户设置正确的时区。
关于php - 如何正确存储和使用不同时区的MySQL TIMESTAMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353829/