首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在PHP web应用程序中构建时区功能

在PHP web应用程序中构建时区功能
EN

Stack Overflow用户
提问于 2009-04-27 14:41:20
回答 3查看 5.7K关注 0票数 3

这个问题和这个问题很相似:

Dealing with timezones in PHP

我读了那个帖子,有更多的问题,不确定如何在PHP/MySQL应用程序中优雅地构建时区支持。

我正在用PHP编写一个应用程序,其中用户可以选择他们的时区。

在这里,所有的时间戳都存储在MySQL的GMT中。在显示数据时,我会将时区转换回用户时区。

以下是我所面对的问题:

1)我向用户展示了一个由MySQL的时区表填充的时区列表,它是一个很大的列表,很难从中选择。

所以,我想实现像windows时区列表这样的东西。区域信息的偏移量。

2) PHP和MySQL可以有不同的列表集合。

3)我应该在哪里转换时区,PHP还是MySQL?我有编码的组合。有时选择一个从MySQL转换而来的列很容易,有时在PHP中转换也很容易。所以,前面这一点就变得非常重要了。例如,在MySQL的time_zone表中,亚洲/加尔各答和亚洲/加尔各答都在那里,但在PHP5.2.6的默认时区数据库中,只有亚洲/加尔各答。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-28 00:55:23

在面对这个问题时,我发现了this reference,它将简洁的Windows风格的时区列表映射到极其详尽的Unix风格的时区列表的子集。

向用户提供这些窗口样式名称的下拉列表(例如,(GMT-05:00)东部时间(美国和加拿大)),并且他们的选择以unix样式格式存储在数据库中(例如,America/New_York)

应用用户的时区首选项的工作是在PHP语言中使用DateTime class在显示时完成的。我想我会推荐这样做,这样您就可以确信您在SQL/PHP中操作的日期始终是UTC格式的,直到它们显示出来。

票数 5
EN

Stack Overflow用户

发布于 2009-04-27 15:09:08

  1. 从一个大列表中选择一个时区并不是那么困难。根据标准时间偏移量对列表进行排序,以便用户可以快速滚动到正确的偏移量,然后从那里查找他们确切的location.
  2. Choose one列表。我倾向于选择较短的列表。只将这些选项呈现给用户。
  3. 会计算所选列表所在的位置。如果你正在展示MySQL列表,让MySQL来计算日期,如果你正在使用PHP的列表,让PHP来计算。这将使您不需要在一个implementation.

中为缺失区域找出一些奇怪的映射

一个奇妙的解决方案可能包括询问用户的位置并推断他们的时区。(但是,也可以选择显式设置它)

票数 4
EN

Stack Overflow用户

发布于 2009-04-28 00:01:09

在这种情况下,自定义类可能是最佳解决方案。然后,您可以使用它们的时区来移动时间和日期。幸运的是,PHP v5就有这样一个内置的对象。您只需记住编写代码,以便当您依赖隐式时区时,这是因为您知道您之前已经显式设置了它。这也意味着如果你不知道隐含的值是什么,你可以去问,有效地让它变得明确。

考虑到PHP的时区支持和MySQL的时区支持,我会在很大程度上使用PHP进行时区操作。MySQL的支持在很大程度上是围绕着它的"now“概念。

哦,对了:you do to to date arithmetic (例如,在“一天”的基础上加上86400秒)。让PHP对象或库来做这件事。他们会修复一些你想不到的bug。(我曾经为一种特殊类型的日期操作编写了一个对象,并花了几个星期的时间与一个间歇性的不定时错误作斗争,直到我发现有一个地方添加了86400来进行一天的转换,而不是使用mktime()。事实证明,夏令时的规则把事情搞得一团糟。当然,这并不是我想要的。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/793820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档