2016-03-24 56 views
1

我在debian 8上使用php 5.6.17。設置owncloud後,我注意到,由owncloud(不是由apache)自己編寫的日誌文件的 錯誤的時間區域。php時區:DateTime :: createFromFormat忽略時區

我調查了這一點,似乎是,該行:

DateTime::createFromFormat("U.u", number_format(microtime(true), 4, ".", ""), 'Europe/Berlin'); 

這不關心任何時區設置。而不是歐洲/柏林(+ 1/+ 2)的時間,我總是得到UTC的時間。我設置了"date.timezone = "Europe/Berlin"和系統時間(debian)也是正確的。

即使我運行的財產以後像下面我得到的結果相同(UTC):

$time=DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), new DateTimeZone('UTC')); 
echo $time->format('c') . "\n"; 
$time=DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), new DateTimeZone('Europe/Berlin')); 
echo $time->format('c') . "\n"; 

任何想法這個問題?

回答

2

引述PHP manual on DateTime::createFromFormat()

注: 時區參數和當前時區被忽略,當時間參數或者包含一個UNIX時間戳(例如946684800)或指定一個時區(例如2010年01期-28T15:00:00 + 02:00)。

如果您想更改時區,則必須在創建對象後使用setTimezone()方法。

+0

是啊謝謝!得到它爲我的測試代碼工作。現在我必須檢查自己的問題。非常感謝你 – Sebastian

+0

如果你想感謝我,upvote並接受我的答案。 :) – Narf

+0

從timestamp =另一個wtf時刻創建DateTime對象在PHP中。 –

0

不幸的是,用切片機創建tz時會被忽略。使用setTimezone fnc:

$micro = microtime(true); 
$dt = DateTime::createFromFormat('U.u', $micro); 
$dt->setTimezone(new DateTimeZone('America/Los_Angeles'));