时区计算。 PHP函数与MySQL函数

时间:2012-04-24 18:17:43

标签: php mysql function timezone

我正在使用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(默认情况下为est)应转换为相应的时区。

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

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

还有其他更好的方法吗?

1 个答案:

答案 0 :(得分: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')