【发布时间】:2013-08-10 01:46:04
【问题描述】:
我正在开发一个网站,我必须在其中处理来自用户的不同可能时区。这成为一个大问题,因为该网站会举办拍卖等耗时的活动。
服务器上的所有日期/时间均采用 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' and NOW() = '2013-08-08 10:26:50')
所有这些时区的胡言乱语都让我大吃一惊。我在这里想念什么?我几乎可以肯定,在数据库中以 UTC 格式存储所有日期/时间是最好的。我只是想不通如何在用户和数据库之间处理它。
【问题讨论】:
-
如果你需要一些代码来澄清我的问题,请说出来。
标签: php javascript mysql timezone client-side