0

我想根据表中的具体情况选择“当前可用”的记录。我认为这应该很容易,但当然,我没有看到它。我希望在这里问能让我的头脑足够清醒,也许我可以回答我自己的问题!

我有 2 张桌子:

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在调整 time-zone 后是匹配的。

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 ');

我可以试试这个:

SELECT id from table_1 inner join table_2 ON (table_1.id=table_2.table_1_id)
WHERE DAYOFWEEK(CONVERT_TZ(UTC_TIMESTAMP, 'GMT', table_1.time_zone_name)) = table_2.day_of_week

但是 CONVERT_TZ 函数不接受安装在我的主机上的 MySql 上的区域名称,例如“US/Eastern”。根据 MySql 文档:

要使用命名时区,例如“MET”或“Europe/Moscow”,必须正确设置时区表。

显然他们没有正确设置。

有没有更好的方法来解决这个问题?任何建议将不胜感激。

4

1 回答 1

0

如果您使用查找表来获得差异,我相信您是在询问站点用户他们在哪里。一旦他们进入他们的位置,您就可以轻松地使用一些 PHP 通过您的脚本设置他们的本地化。使用php 本地化这很容易。时区列表确实很大。虽然它确实包含您的美国/东部示例,但不建议您实施 t 因为它只是为了向后兼容而维护(在“其他”下)。

然后你可以使用php datedate('Z')获得他们在几秒钟内的偏移量。如果您将日期时间字段存储为 unix 时间戳,那么添加或减去它们的偏移量将是一件小事。通过这种方式,您可以标准化您存储的数据并将其保持在零偏移量 (GMT)。

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

于 2012-07-10T01:20:12.743 回答