处理时区

时间:2010-12-30 15:28:29

标签: php mysql timezone

我需要一些关于我的项目要求的指导,我正在开发一个必须处理各个时区的应用程序。

方案: 用户1来自印度,因此他的时区将是GMT + 05:30 用户2来自英国,因此他的时区将是GMT + 01:00

如果用户1向用户2发送消息,我想根据用户的时区显示消息发送/接收时间。例如,用户1在印度时间6:30发送消息,此时用户2将在英国时间2:00查看消息。

这是我的问题,每当我保存消息时,我应该将其转换为GMT + 00,因此我的所有基本时间戳都是相同的,然后当我显示消息时,我将其转换回用户特定的时区。这会很复杂吗?这是最好的方法吗?

我喜欢获取保存和显示的视图,同时我应该从优化的角度进行时间转换。我需要处理任何/所有时区。

我正在用PHP和MySQL开发这个应用程序,我知道PHP和MySQL都有时区转换方法。

我只想弄清楚这样做的最好方法。期待获得所有有价值的建议。

注意:到目前为止,我并不担心白天/轻度节省。

由于 拉维

4 个答案:

答案 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以同样的方式做到了:

  • 第一步,确定日期的时区
  • 第二步,将日期的时区设置为GMT(+0)
  • 第三步,将时区和GMT日期存储在两个单独的列中。

无论如何,如果您需要更多信息,可以发布帖子here