2011-09-29 27 views
0

我有一個應用程序使用time()來記錄主題發佈的時間。我已經這麼做了很長時間,而且我唯一遇到的問題是時間總是停止一個小時(主要是我從未考慮過的DST問題)。time()到DateTime

我想切換到DateTime方法,因爲我也切換到Twig,它在設置時區時使用該日期格式。

但從我所看到的,你不能使用時間戳來解析日期。我的問題是,如何輸入日期並解析它,如果它不是time(),他們在尋找什麼格式?

+0

它遵循,直到第二段的一半..那麼它不是很清楚.. – amosrivera

+0

我假設這是數據庫驅動(考慮到你提到的節省話題創建時間),所以我最大的問題是 - 爲什麼aren'你使用數據庫的集成時間嗎? (讓數據庫處理時間,PHP應該只將它轉換爲用戶的本地時間)。 –

+0

我該怎麼做? – Eman

回答

0

聽起來它的服務器的默認時區是UTC。我建議您嘗試將的php.ini設置更改爲適用於DST的設置。這意味着當您使用date()時,將會爲DST正確調整結果輸出。

+0

事情是,這個應用程序在不同的系統上使用,所以我需要做一些典型的用戶可以在共享主機帳戶上做的事情。我不介意UTC,如果我知道我必須做什麼來完成切換。 – Eman

+0

我在說什麼的例子:http://twig.sensiolabs.org/doc/filters/date.html – Eman

+0

'date_default_timezone_set(「Europe/London」)'會幫助你。或者你需要什麼時區。把它放在你的PHP腳本的開頭,你不必擔心。 –

0

不能使用時間戳來解析

有一個辦法,如果你的PHP版本> = 5.3日期:

$time = time();//or other time 
$date = DateTime::createFromFormat('U',$time); 

但事實上它由於DateTime並不依賴它,因此使用時間戳有點奇怪。如果日期是英語或「法語」(如d/m/y),則可以使用日期時間構造函數直接解析日期字符串。您也可以創建自定義格式。

你怎麼輸入日期和解析它,什麼格式,他們找如果不是時間()

如果是AA標準格式日期:

$date = new DateTime($yourString);//would throw an exception if the format is wrong 

如果它是一個自定義格式,如DD/MM/YYYY 14h32mins

$date = DateTime::createFromFormat('d/m/Y h\hi\m\i\n\s',$yourString); 
if($date === false){//if format does not fit 
    exit('Your wrong !'); 
} 

我有一個應用程序使用time()來記錄主題發佈的時間。

非常不好的做法。在MySQL中,您有DateTime格式(每個關係數據庫系統都有自己的等價物)來存儲日期時間,並且完全兼容PHP中的DateTime構造函數以便遷移到它(使用FROM_TIMESTAMP更改爲DateTime)。

相關問題