2014-04-16 16 views
3

這個時區的東西是一個真正的噩夢。我將所有值存儲爲我的數據庫中的UTC。我想要做的是構建一個函數,返回本地時區中的DateTime字符串。當我使用Laravel時,我想用Carbon來完成這項工作。我已經嘗試過多次,但都失敗了。從mysql解析日期到碳對象,然後轉換成本地時區

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

這個日期是UTC。我如何將它解析爲Carbon到Carbon中,然後告訴Carbon將時間更改爲本地時區?我錯過了什麼嗎?

回答

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)。在用戶登錄期間,我設置了會話變量「timezone」。

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; 
} 
相關問題