0

我正在使用 php 开发一个 API,我只是将查询结果作为 JSON 字符串发送出去。结果是多个表的组合。然而,其中一个领域是时间。我需要根据来自不同表的时区设置将其转换为不同的时区。

这是当前的输出:

     Array ( "Show_name" => "Billards",
             "Show_type" => "Movie",
             "Start_Time" => "2011-11-09 07:00:00",
             "End_Time" => "2011-11-09 09:00:00",
             "Open" => "Yes"
           );

默认情况下,所有记录的开始时间和结束时间都是 EST。时区设置存储在具有 Timezone_ID、GMT_offset、DST_offset 字段的不同表中。根据这些默认设置的 start_time 和 end_time,应将其转换为各自的时区。

我最初计划编写一个 MySQL 函数来从查询本身计算这个,这样 JSON 格式/字段就不会改变。但我看到,与 PHP 函数相比,它的速度太慢了。

根据您的经验,您有什么建议?- 有没有办法在查询中简单地计算?- MySQL 函数的性能是否优于 PHP?- 如果我需要使用 php 函数,我需要遍历所有记录来计算这个。不确定我是否需要单独提取时区记录。因为我不想更改 JSON 响应中的格式/字段数。

还有其他更好的方法吗?

4

1 回答 1

1

我通常在数据库端执行此操作。请注意,我将数据库中的所有日期都存储为 UTC。

因此,要在用户的本地时区向用户显示数据,我会执行以下操作:

SELECT Show_name, Show_type,
  Start_time, CONVERT_TZ(Start_time, 'UTC', 'EST') AS Start_time_local
FROM Shows

其中“EST”是用户在其偏好中选择的时区。

将数据库中的日期从 EST 更改为 UTC 不需要任何架构更改,因为时区未存储在架构中。

要将所有日期从 EST 转换为 UTC,只需执行以下操作:

UPDATE Shows
SET Start_time = CONVERT_TZ(Start_time, 'EST', 'UTC')
于 2012-04-24T19:43:57.950 回答