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

Php MySQL:在调整时区后,想知道如何根据日期选择记录,php,mysql,timezone,timezone-offset,convert-tz,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  
    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,我应该能够从表1中选择记录,其中表2.day是调整时区后的匹配项

MySql函数CONVERT_TZ看起来很有前途

转换为'2004-01-01 12:00:00'、'GMT'、'MET' 转换为“2004-01-01 12:00:00”、“00+00”、“10:00”

我本可以试试这个:

从表1上的表1内部联接表2中选择id。id=表2。表1\U id 其中DAYOFWEEKCONVERT\u TZUTC\u时间戳“GMT”,表1.time\u zone\u name=表2.day\u of\u week

但是CONVERT_TZ函数不接受像我的主机上安装的MySql上的US/Eastern这样的区域名称。根据MySql文档:

要使用命名时区,如“大都会”或“欧洲/莫斯科”,必须正确设置时区表

很明显,它们没有正确设置


有没有更好的办法?任何建议都将不胜感激。

如果您使用查找表来获得差异,我相信您是在询问网站用户他们在哪里。一旦它们进入它们的位置,您就可以轻松地使用一些PHP通过脚本设置它们的本地化。这对我来说很容易。这个房间真的很大。虽然它确实包含您的US/Eastern示例,但不建议您实现t,因为它仅在“Others”下维护,以便向后兼容

然后您可以使用这个日期'Z'以秒为单位获得它们的偏移量。如果您将datetime字段存储为unix时间戳,那么添加或减去它们的偏移量将是一件小事。通过这种方式,您可以规范化存储的数据,并将其保持在零偏移GMT


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

再次感谢。您的解决方案似乎在用户记录中存储gmt偏移量-05:00,而不是时区名称US/Eastern。我考虑过这一点,但它似乎没有解决DST的变化。我想我可以存储夏季/冬季两个偏移量,然后我只需要根据当前时间知道使用哪一个。嗯。但是有些地方不是在一年中的不同时间改成了DST吗?六羟甲基三聚氰胺六甲醚。