如何检索具有多个时区的记录

时间:2013-12-20 02:21:57

标签: php mysql timezone

我正在创建一个网站,我需要使用注册用户时区来确定他们是否可以根据他们在信息中心中设置的内容在特定日期接收电子邮件。

我想要解决的主要问题是,我希望能够选择在结果的顶部显示那些现在可用的用户,以节省必须搜索人员页面的人,以找到可用的人。

我粗略地了解了一个可以用来在用户页面上显示/隐藏电子邮件表单的功能......它更多地是关于搜索页面上的查询,它将显示所有用户以及如何最好地订购结果

默认时区为GMT。

因此,如果今天是星期一,并且以下用户将其可用性设置为:

USER | timezone | availability_today | emails_received

1 | America/Los_Angeles | 2 | 1 (still available)

2 | America/New_York | 0 | 0 (not available)

3 | Europe/London | 1 | 1 (not available)

我认为这更像是我实际保存/访问的日期/时区的问题。在电子邮件表中,ID具有DATE_SENT列,因此我可以计算已发送的电子邮件数量与其可用性进行比较。但如果该网站是格林威治标准时间......如果他们在美国或澳大利亚,这将不是用户的正确时间......

就像我说的那样,它更多的是关于搜索页面上的select语句,我无法用所有的时区来解决这个问题。我的主持人不支持CONVERT_TZ。

或者我只是在GMT中计算它?

当你正在阅读它时,我很困惑地问这个问题。希望有人理解足以提出建议。它可能不像我想要的那样令人困惑。

编辑: -

问题:

说它的周一GMT。在星期二的用户(非访问者)国家/地区,他们的可用性设置为0.如果我在服务器上使用GMT,那么电子邮件将通过。周二(用户所在国家的Weds),他们不会得到一个。

访客无需注册即可查看搜索结果。他们需要向用户发送电子邮件。用户页面很容易处理一次转换。

2 个答案:

答案 0 :(得分:0)

几种选择......

(1)将所有内容存储在GMT的datetime列中。您可以通过执行诸如

之类的MySQL查询来执行操作
SELECT 'my date' - INTERVAL 5 HOUR

(2)将所有内容存储在用户当前时区的时间戳列中。您可以通过执行查询来设置当前数据库连接的时区...

SET time_zone = 'Europe/London'

使用

查看当前时区
SELECT @@time_zone;

'Europe/London'替换为正确的时区。当MySQL使用时间戳时,它在内部以GMT格式存储数据。当您将数据拉回时,MySQL会自动将时间转换回客户端当前设置的任何时区。

答案 1 :(得分:0)

仅使用converting for display在纪元时间FROM_UNIXTIME()存储时间。忘掉多个时区,正如索科洛夫先生雄辩地说的那样,

  这种方式导致疯狂