我正在开发一个网站,我必须在其中处理来自用户的不同可能时区。这成为一个大问题,因为该网站会举办拍卖等耗时的活动。
服务器上的所有日期/时间均采用 UTC。数据库以 UTC 时间戳存储所有内容。PHP 默认时区也设置为 UTC ( date_default_timezone_set('UTC');
)。
现在,我的问题是我应该如何与用户交互,无论我只是显示日期,还是更重要的是,我正在从用户输入中读取日期/时间。
一个具体的例子:
- 拍卖有一个截止日期,我将其作为 UTC 存储在数据库中。
- 当我在网站上查看拍卖时,javascript 计时器使用一个
Date
对象来计算剩余时间。它会自动将时区转换为 GMT+0100(我的本地时区)。因此,如果截止日期是'2013-08-08 10:46:08'
(UTC),则 javascript 日期对象将返回Aug 08 2013 11:26:15 GMT+0100 (GMT Standard Time)
. - 如果当前时间大于 11:46:08,则计时器说剩余时间为 00:00(这是正确的)。
但是,如果我尝试插入出价,服务器会接受,因为条件
MySQL INSERT
评估为true
:INSERT INTO Bids ... WHERE ... ANDuction_deadline > NOW() ...
(因为auction_deadline ='2013-08-08 10:46:08'
和 NOW() = '2013-08-08 10:26:50'
)
所有这些关于时区的胡言乱语都让我大吃一惊。我在这里想念什么?我几乎可以肯定,在数据库中以 UTC 格式存储所有日期/时间是最好的。我只是想不通如何在用户和数据库之间处理它。