我正在使用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响应中的字段格式/数量。
还有其他更好的方法吗?
答案 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')