2012-04-24 2 views
0

나는 단지 JSON 문자열로 쿼리 결과를 보내는 PHP를 사용하여 API를 개발 중이다. 결과는 여러 테이블의 조합입니다. 그러나 필드 중 하나는 시간입니다. 이 테이블을 다른 테이블의 시간대 설정에 따라 다른 시간대로 변환해야합니다.시간대 계산. PHP 함수 대 MySQL 함수

 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_time 및 end_time이 각각의 시간대로 변환되어야합니다.

처음에는 쿼리 자체에서이 권리를 계산하기 위해 MySQL 함수를 작성하려고했으나 JSON 형식/필드가 변경되지 않습니다. 그러나 나는 PHP 함수에 비해 너무 느리다는 것을 알았다.

귀하의 경험에 근거하여 무엇을 제안합니까? - 단순히 쿼리에서 함께 계산하는 방법이 있습니까? - MySQL 기능이 PHP보다 우수한 성능을 제공합니까? - PHP 함수를 사용해야하는 경우이를 계산하기 위해 모든 레코드를 반복해야합니다. 시간대 레코드를 별도로 가져와야하는지 잘 모르겠습니다. 왜냐하면 JSON 응답의 형식/필드 수를 변경하고 싶지 않기 때문입니다.

더 좋은 방법이 있습니까?

+0

당신은 UTC에서 데이터베이스에있는 모든 시간을 저장하거나 UTC는 당신이 그것을 조정해야 할 때 인생을 훨씬 쉽게 만들 것입니다 타임 스탬프 경우 다른 시간대. EST에서는 원하는 표준 시간대로 변환하기 전에 EST 오프셋 및 DST를 고려해야합니다. 그러나 그 변화를 만들기에는 너무 늦을 수도 있습니다. – drew010

+0

@ drew010 예, 지금 시점에서 DB 스키마를 변경할 수 없습니다 .-( –

+1

[CONVERT_TZ()] (http://dev.mysql.com/doc/refman/5.5/en/date-and)을 보았습니까? -time-functions.html # function_convert-tz)? – drew010

답변

1

나는 일반적으로 데이터베이스 측에서이 작업을 수행합니다. 모든 날짜는 데이터베이스에 UTC로 저장합니다.

따라서, 사용자의 로컬 시간대의 사용자에게 데이터를 표시하기 위해, 나는 같은 것을 할 : 'EST'는 사용자가 자신의 환경 설정에서 선택한 시간대입니다

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

.

EST에서 UTC로 데이터베이스의 날짜를 변경하면 스키마에 시간대가 저장되어 있지 않으므로 스키마를 변경할 필요가 없습니다.

는 UTC에 EST에서 모든 날짜를 변환하려면 다음을 수행하십시오

UPDATE Shows 
SET Start_time = CONVERT_TZ(Start_time, 'EST', 'UTC')