我正在创建一个基于安排约会的应用程序,在一个用户可以选择他们想要的时区的环境中。
经过一番研究,我确信使用 MYSQLTIMESTAMP
来存储所有日期。我认为,在使用 时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 时区,时间就会关闭一个小时。
我究竟做错了什么?请帮忙!