0

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

经过一番研究,我确信使用 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 时区,时间就会关闭一个小时

我究竟做错了什么?请帮忙!

4

2 回答 2

2

如果您使用;

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

...MySQL 的服务器时区在夏季将比太平洋时间晚一小时,因为PDTGMT-07:00. 而是使用例如;

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

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

由于 MySQL 并不总是包含所有可用的时区,如果America/Los_Angeles您的系统中缺少时区,这个页面应该可以帮助您安装它

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

于 2013-03-12T05:47:31.003 回答
0

为什么不将时间作为 UTC(我们英语更喜欢 GMT)存储在数据库中?

然后在 mySql中使用CONVERT_TZ()函数或在 PHP中使用setTimezone 。

这将使人们能够轻松地查看其他人的日历并转换为他们的当地时间。因此,没有人有理由太早或太晚(或在错误的日子!)。

于 2013-03-12T05:57:41.330 回答