我正在开发一个网站,我必须处理用户可能存在的不同时区。这成为一个大问题,因为该网站举办拍卖等时间敏感的活动。
服务器上的所有日期/时间均采用 UTC 格式。数据库以 UTC 时间戳存储所有内容。 PHP 默认时区也设置为 UTC (date_default_timezone_set('UTC');
).
现在,我的问题是我应该如何与用户交互,无论我只显示日期,还是更重要的是,我正在从用户输入中读取日期/时间。
一个具体的例子:
(因为拍卖截止日期='2013-08-08 10:46:08'
现在()='2013-08-08 10:26:50'
)
所有这些时区的胡言乱语融化了我的大脑。我在这里缺少什么?我几乎可以肯定,在数据库中以 UTC 格式存储所有日期/时间是最好的。我只是想不清楚如何在用户和数据库之间处理它。
您的问题根本不涉及时区,而只是客户可以转动时钟或使时钟大幅倾斜这一事实。为此,修复方法是每隔一段时间轮询一次服务器,以获取用于计算的偏移修复。
事实上,您甚至不需要日期对象。拍卖结束时有一个普遍存在的时刻。假设它是1375960662823
。现在,通用时刻是1375960669199
,因此我们看到拍卖在 6 秒后结束(1375960662823 - 1375960669199 ~ 6000
)。无论我在摩洛哥还是日本,都会在 6 秒内结束。你明白了吗?
要生成这些数字,您可以在客户端调用var now = Date.now() + skewFix
where skewFix
是在客户端出现时间偏差或手动将计算机设置为错误时间时需要应用的更正。
在 PHP 中,您可以使用以下命令生成它$now = time() * 1000;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)