2014-04-16 3 views
3

이 시간대는 정말 악몽입니다. 데이터베이스에 UTC로 모든 값을 저장합니다. 내가 뭘하고 싶은 건 현지 시간대에 DateTime 문자열을 반환하는 함수를 빌드하는 것입니다. Laravel을 사용하면서 Carbon을 사용하고 싶습니다. 나는 여러 번 시도하고 실패했다.mysql에서 carbon 객체로 날짜를 파싱 한 다음 현지 시간대로 변환

$dateasstring= '2014-01-05 12:00:00' //retrieved from databse

이 날짜는 UTC입니다. 어떻게 그것을 UTC로 해석하여 Carbon으로 만든 다음 Carbon에게 시간을 localtimezone으로 바꾸라고 말합니까? 내가 놓친 게 있니?

답변

4
$carbon = new Carbon\Carbon($dateasstring); 
$local = $carbon->timezone($localTimeZone); 

// example from artisan tinker: 
[1] > $utc = new Carbon\Carbon('2014-01-05 12:00:00'); 
// object(Carbon\Carbon)(
// 'date' => '2014-01-05 12:00:00', 
// 'timezone_type' => 3, 
// 'timezone' => 'UTC' 
//) 
[2] > $warsaw = $utc->timezone('Europe/Warsaw'); 
// object(Carbon\Carbon)(
// 'date' => '2014-01-05 13:00:00', 
// 'timezone_type' => 3, 
// 'timezone' => 'Europe/Warsaw' 
//) 
1

이것은 내가 사용하는 해결책입니다. 함수에 날짜 UTC (toutc)를 만들고 함수를 로컬 시간 (tolocal)으로 다시 전환하는 데 사용합니다. 사용자 로그인 중에 세션 변수 "시간대"를 설정했습니다.

private function totimezone($utc){ 
    $usertz = Session::get('timezone'); 
    $carbon = new Carbon($utc, 'UTC'); 
    $carbon->timezone = new DateTimeZone($usertz); 
    return $carbon; 

} 

private function toutc($local){ 
    $usertz = Session::get('timezone'); 
    $carbon = new Carbon($local, $usertz); 
    $carbon->timezone = new DateTimeZone('UTC'); 
    return $carbon; 
}