2016-09-27 33 views
0

我剛剛將一個Symfony2.4項目遷移到Symfony3.0,我面臨着一個奇怪的情況。Symfony3使用時區的原則

該項目的默認時區是UTC,所有內容都以UTC時間戳存儲在MYSQL數據庫中。

我檢索與名爲 'Checkout' 日期時間字段中的項,將它傳遞給樹枝模板:

<p>{{ dump(entity.checkOut) }}</p> 
<p>{{ dump(entity.checkOut.getTimestamp()) }}</p> 

我也得到:

DateTime {#585 ▼ 
    +"date": "2016-09-17 10:46:00.000000" 
    +"timezone_type": 3 
    +"timezone": "UTC" 
} 
1474109160 

這是正確的。

但我的應用程序應該支持來自不同時區的用戶。所以我存儲用戶的首選時區和使用事件偵聽器來設置它

date_default_timezone_set($this->token_storage->getToken()->getUser()->getTimezone()); 

,同樣進入後顯示:

DateTime {#585 ▼ 
    +"date": "2016-09-17 10:46:00.000000" 
    +"timezone_type": 3 
    +"timezone": "Asia/Jakarta" 
} 
1474083960 

這顯然是錯誤的,因爲時間戳現在是不同的。我期望這樣:

DateTime {#585 ▼ 
    +"date": "2016-09-17 17:46:00.000000" 
    +"timezone_type": 3 
    +"timezone": "Asia/Jakarta" 
} 
1474109160 

這用於在sf2.4罰款。任何人都可以解釋問題是什麼,我該如何解決它?

回答

3

這是因爲您正在更改服務器的默認時區,而不是更改有問題的DateTime實例的時區。我的一個寵物討厭!

我不熟悉的樹枝,但是做這樣的事情會得到預期的結果: -

<p>{{ dump(entity.checkOut) }}</p> 
<p>{{ dump(entity.checkOut.setTimeZone(new \DateTimeZone("Asia/Jakarta"))) }}</p> 
<p>{{ dump(entity.checkOut.getTimestamp()) }}</p> 
+0

謝謝您的回答。這確實是一個解決方案,但需要我更新網站上的每個模板。還有一些情況下,例如我必須獲取特定月份的所有記錄,並且在這些情況下,我還應該考慮用戶的時區。更改默認時區非常方便,因爲所有內容都是根據用戶的時區計算的。 – gtsouk

+0

方便是的,但仍然錯誤,因爲你正在經歷。 – vascowhite