2014-05-01 62 views
1

在我的Symfony 2項目中,我們需要使用日期和時間來存儲各種信息。目前在數據庫中,我們使用date作爲列類型來存儲所有這些信息。當信息首次存儲在數據庫中時,一切都會順利進行。受DST影響的Symfony2和PHP,我如何阻止它影響我?

問題是,當我使用相同的表單類型修改信息時,數據在使用Doctrine發出merge後發生了變化。更糟糕的是,數據庫信息,如果我修改它沒有前端(使用UPDATE命令),存儲沒有任何問題,並且它應該顯示它應該。

我在這個問題上已經研究了一下,這是因爲Symfony在服務器的時區並將其應用於從視圖到模型的轉換期間的輸入數據。 PHP通常會考慮DST,但是由於政治問題,PHP沒有采用正確的DST結束日期(它應該在3月份結束,但在4月結束,PHP採用原始的3月日期),因此數據會相應地改變。

我該怎麼做才能避免再發生這個問題?在我的國家,DST在過去的幾年中有所變化,我不能相信我的電腦能夠採用正確的日期。我想使它與時區無關。

  • 我應該如何在數據庫中存儲我的日期?
  • 我應該如何在Symfony項目中管理我的日期?

預先感謝您。

+0

我想你可以找到多個選項來設置或定義你的Symfony應用程序默認時區[http://www.epicfoobar.com/2013/10/how-to-set-time-zone-in-symfony2 /] – Javad

+0

問題是我的時區考慮DST。它認爲的DST是政府日期變化的時間,我們不知道他們什麼時候或者是否會改變時間。 PHP無法知道,因此係統容易出錯。我已經在php.ini中設置了時區,因爲它應該是不可變的,但是DST會拋出它,如果我試圖在其他地方重新聲明它,因爲結果基本上是相同的,那麼它就沒用了。 –

+0

在這種情況下,您如何看待在應用程序中設置應用程序設置,以便您(管理員用戶)能夠根據政府決策選擇應用程序的有效時區? – Javad

回答

1

爲了有一個不變的PHP時區,總是在php.ini這樣訴諸UTC:

;;;;;;;;;;;;;;;;;;; 
; Module Settings ; 
;;;;;;;;;;;;;;;;;;; 

... 

[Date] 
; Defines the default timezone used by the date functions 
; http://php.net/date.timezone 
date.timezone=UTC 

這將迫使PHP有一個時區,將永遠不會盡管任何DST的變化而變化。