2014-09-30 5 views
0

레코드를 데이터베이스에 추가 할 때 데이터베이스 NOW() 함수를 사용하여 날짜에 스탬프를 찍습니다. 그러나 내 서버는 전 세계의 중간에 위치하고 있으며 다른 시간대가 있습니다.저장된 데이터베이스 날짜를 현재 시간대로 변경 (strtotime?)

데이터베이스에서이 날짜 스탬프를 가져올 때 내 사이트에 "정확한"시간을 표시하려면 +8 시간을 조정해야합니다. 그러나, 나는 strtotime 첫 번째 장소에서 쓸만한 날짜를 만들려면 다음 strtotime +8 시간, 그 다음에 strtotime 그것은 그것을 필요한 형식으로 바꾼다, 맞습니까?

여러 번의 문장 반복을 시도했지만, 30 Sep 07:35 또는 01 Jan 00:00 개의 결과를 얻을 수 있으며 요청한 단어는 30 Sep 15:35이 아닙니다. 나는 실패 시도한 여러 가지의 2014-09-30 07:35:36

하나 :

$chat_time = date("Y-m-d H:i:s", strtotime($chat_time)); 
$chat_time = strtotime("+8 hours"); 
$chat_time = date("d M, H:i", strtotime($chat_time)); 

답변

3

당신은에 대한 시간대를 조정 DateTimeZone()DateTime()을 사용할 수 있습니다

값은 datetime 형식으로 데이터베이스에 저장됩니다 날짜/시간 값 :

$chat_time = new DateTime($chat_time, new DateTimeZone('DB_TIMEZONE')); 
$chat_time->setTimezone(new DateTimeZone('YOUR_TIMEZONE')); 
echo $chat_time->format("d M, H:i"); 

분명히을 대체해야합니다. 유효한 값을 가진및 YOUR_TIMEZONE. 당신은 그들의 목록을 here 얻을 수 있습니다.

+0

는 매력을 작품, 감사합니다. – mpdc

1
연결에

당신이 더 나은 세트 시간대, NOW() 다음 올바른 반환 추천했습니다 :

SQL 쿼리를의
SET time_zone = 'Europe/Amsterdam' 

. 연결 후 실행해야합니다.

물론, 이것은 단지 새로운 삽입 및 업데이트를 위해, 당신은 기존의도 해결해야합니다

UPDATE table SET datetimeColumn = DATE_ADD(datetimeColumn, INTERVAL 8 HOUR) 
+0

앞으로이 문제를 방지하는 것이 좋습니다. 감사합니다. +1 – mpdc

+0

연결을 로컬 시간대로 설정하는 대신 UTC로 타임 스탬프를 저장하여 모호성을 제거하는 것이 좋습니다. 'NOW()'대신'UTC_TIMESTAMP()'를 사용하십시오. – DerVO

관련 문제