在处理大型应用程序时,我正在尝试使日期时间标记与当前用户时间一致。所以如果活动ID在下午3:00完成,那么每个用户都会在下午3:00看到它
所以这是问题的解决方案步骤。如果我没有朝着正确的方向前进,请纠正我或引导我走向正确的方向。
将所有日期时间存储在MySql中作为UTC时间。
将时区存储在具有当前偏移量的表中。例如
zone_id zone_name utc-offset
1 Central -6
在我的users表中,我有一个user_time_zone_id字段,在该字段中,我将在用户设置中显示值“1”,因此它会说该用户正在使用“Central”位置的系统。 / p>
在我的php应用程序配置中,我将默认时区设置为UTC
date_default_timezone_set('UTC');
加载此应用程序后,我定义了用户偏移量,并在每个日期时间输出我执行时间计算。例如date('Y-m-d', strtotime($current_offset.' hour')) where $current_offset = -6
,因为它是在页面加载时由用户配置文件定义的。
以下是我的问题。
我对此问题的处理方法是否正确? 有没有更好的方法呢? 如何计算夏令时?请记住,该国的某些地方没有夏令时。
答案 0 :(得分:1)
我曾经有过一次类似的事情,最后是试图跟踪用户时区和夏令时的痛苦,特别是当你的一半客户在AZ没有夏令时。我不知道这对你是否可行,但我最终做的只是将所有内容存储在UTC中,然后使用JS将其转换为用户本地时间Date
对象。它是通过ajax调用完成的,但如果需要,您还可以echo
document.write
。
答案 1 :(得分:0)
您不需要使用date_default_timezone_set
,请使用对时区具有原生支持的PHP DateTime
class。或者,就像@romo说的那样,你可以用JavaScript在客户端上做到这一点。