MySQL:想知道如何在调整时区后根据日期选择记录

时间:2012-07-09 23:47:44

标签: php mysql timezone timezone-offset convert-tz

我想根据表格中的细节选择“当前可用”的记录。我认为应该很容易,但当然,我没有看到它。我希望在这里问这个问题会让我头疼,也许我可以回答我自己的问题!

我有两张桌子:

table_1  
    id  
    time_zone_name (eg, "US/Eastern")

table_2  
    tab1_id  
    day_of_week (1=Monday, 7=Saturday)

鉴于我知道当前的GMT时间戳是“2012-07-08 13:35:00 GMT”,我应该能够从table_1中选择记录,其中table_2.day_of_week是一个匹配的适用于时区

MySql函数CONVERT_TZ看起来很有前途!

  

CONVERT_TZ('2004-01-01 12:00:00','GMT','MET')
  CONVERT_TZ('2004-01-01 12:00:00','+ 00:00','+ 10:00');

我本可以尝试这个:

  

来自table_1内部联接table_2的SELECT id ON(table_1.id = table_2.table_1_id)
  在哪里DAYOFWEEK(CONVERT_TZ(UTC_TIMESTAMP,'GMT',table_1.time_zone_name))= table_2.day_of_week

但CONVERT_TZ函数不接受我主机上安装的MySql上的“US / Eastern”等区域名称。根据MySql doc:

  

要使用“MET”或“Europe / Moscow”等指定时区,必须正确设置时区表。

显然他们没有正确设置。

还有更好的方法吗?任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您使用查找表来获得差异,我相信您要问网站用户他们在哪里。一旦他们进入他们的位置,您就可以轻松地使用一些PHP通过脚本设置他们的本地化。使用php localisation非常简单。 list of timezones确实很大。虽然它确实包含您的US / Eastern示例,但不建议您实现t,因为它仅维护(在“其他”下)以实现向后兼容性。

然后您可以使用date('Z') php date来获取它们在几秒钟内的偏移量。如果将日期时间字段存储为unix时间戳,则添加或减去其偏移量将是一件微不足道的事情。这样,您可以对存储的数据进行标准化并使其保持零偏移(GMT)。

当您查询数据库中的数据时,只需将您在上一步中获得的偏移量添加到结果输出中。您甚至可以再次使用date()将日期/时间格式化为其本地格式类型。