我的数据库服务器(运行 MySql 5.5)设置为 UTC,日期使用 UNSIGNED INT 作为 Unix 时间戳存储在数据库中。数据库主要用于存储在特定时间(exec_time)运行的任务。
我通过使用登录用户的时区(在本例中为 BST)在 PHP 中创建时间戳来插入任务。例如,我有一个任务设置为在 1351396800 运行,这是明天早上 4 点格林威治标准时间。
我使用以下查询从数据库中提取任务:
SELECT * FROM tasks WHERE exec_time <= UNIX_TIMESTAMP();
当明天凌晨 2 点时钟回退一小时时,这个设置可以吗?
更新:PHP 可以很好地转换日期。将 PHP 时区设置为 Europe/Dublin(当前为 BST)在午夜 12 点和凌晨 4 点添加的两个事件存储如下:
mysql> select exec_time, FROM_UNIXTIME(exec_time) from tasks order by id desc limit 2;
+-------------+----------------------------+
| exec_time | FROM_UNIXTIME(exec_time) |
+-------------+----------------------------+
| 1351378800 | 2012-10-27 23:00:00 |
| 1351396800 | 2012-10-28 04:00:00 |