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

时区计算。PHP函数与MySQL函数,php,mysql,function,timezone,Php,Mysql,Function,Timezone,我正在使用php开发一个API,其中我只是将查询结果作为JSON字符串发送出去。结果是多个表的组合。然而,其中一个领域是时间。我需要根据不同表中的时区设置将其转换为不同的时区 以下是电流输出: Array ( "Show_name" => "Billards", "Show_type" => "Movie", "Start_Time" => "2011-11-09 07:00:00", "E

我正在使用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。根据这些设置,开始时间和结束时间(默认为est)应转换为各自的时区

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

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


还有更好的办法吗

我通常在数据库端执行此操作。请注意,我将数据库中的所有日期存储为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')

如果您在数据库中以UTC或UTC时间戳存储所有时间,则当您必须将其调整到不同的时区时,生活将变得更加轻松。在EST中,在将其转换为所需时区之前,您必须考虑EST偏移量和DST。但是,进行更改可能太晚了。@drew010,是的,我现在无法更改DB模式:-(您看过吗?