我需要一些关于我的项目要求的指导,我正在开发一个必须处理各个时区的应用程序。
方案: 用户1来自印度,因此他的时区将是GMT + 05:30 用户2来自英国,因此他的时区将是GMT + 01:00
如果用户1向用户2发送消息,我想根据用户的时区显示消息发送/接收时间。例如,用户1在印度时间6:30发送消息,此时用户2将在英国时间2:00查看消息。
这是我的问题,每当我保存消息时,我应该将其转换为GMT + 00,因此我的所有基本时间戳都是相同的,然后当我显示消息时,我将其转换回用户特定的时区。这会很复杂吗?这是最好的方法吗?
我喜欢获取保存和显示的视图,同时我应该从优化的角度进行时间转换。我需要处理任何/所有时区。
我正在用PHP和MySQL开发这个应用程序,我知道PHP和MySQL都有时区转换方法。
我只想弄清楚这样做的最好方法。期待获得所有有价值的建议。
注意:到目前为止,我并不担心白天/轻度节省。
由于 拉维
答案 0 :(得分:0)
存储消息时,例如,转换,使用和存储它们的DST中性时区 - UTC或GMT。
使用它们存储原始时区偏移量和DST偏移量 - 这将有助于业务逻辑。
显示信息时,请使用此数据并转换为当地时间。
有关使用不同时区的最佳做法,请参阅this问题和答案。
答案 1 :(得分:0)
这是我的问题,每当我保存消息时,我应该将其转换为GMT + 00,因此我的所有基本时间戳都是相同的,然后当我显示消息时,我将其转换回用户特定的时区。这会很复杂吗?这是最好的方法吗?
是的。唯一需要注意的是允许每个用户指定他们想要的时区来查看时间(作为首选项或来自客户端系统的设置或用户数据库)。
我喜欢获取保存和显示的视图,同时我应该从优化的角度进行时间转换。我需要处理任何/所有时区。
从客户端转换为GMT的最佳时机是您的“业务”逻辑 - 基本上,无论您处理Web表单数据的逻辑是什么。不在数据库方面。
从GMT转换为客户端进行查看的最佳时间就在表示层之前/之中,例如,当您打印HTML时。
原因是这样,尽可能少的代码需要担心时区。
注意如果/当您需要执行任何特定于日期的逻辑时(例如,基于日期的聚合而不是仅向用户打印时间戳),此时区相关逻辑变得非常复杂。
答案 2 :(得分:0)
将数据保存到数据库时,请使用以下内容:
INSERT INTO TableName SET TheDateFile=UTC_TIMESTAMP()
然后,假设您允许每个用户指定自己的时区,您需要转换业务逻辑中的日期(如DVK所述)
类似的东西:
DATE_FORMAT(DATE_ADD(TheDateField, INTERVAL 2 HOUR) // or whatever value
我自己没有这样做,但我想根据用户时区存储小时间隔会很简单。
答案 3 :(得分:0)
在任何情况下,如果您处理位于不同时区的用户,您必须将时区与日期分开。很久以前我听说wordpress以同样的方式做到了:
无论如何,如果您需要更多信息,可以发布帖子here