2016-03-24 22 views
1

Ich benutze PHP 5.6.17 auf Debian 8. Nach dem Einrichten von owncloud, habe ich festgestellt, dass die Protokolle, die selbst geschrieben von owncloud sind (nicht von Apache) hat falsche Zeit Zonen.php Zeitzone: DateTime :: createFromFormat ignoriert Zeitzone

suchte ich dies ein wenig, wie scheint, dass die Zeile:

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

Das ist nicht jede Zeitzone Einstellung schert. Anstatt der Zeit für Europa/Berlin (+ 1/+ 2) bekomme ich immer die Zeit für UTC.

In /etc/php5/apache2/php.ini ich "date.timezone = "Europe/Berlin" gesetzt und die Systemzeit (debian) ist auch korrekt.

Auch wenn ich laufen ungefähr wie unten ich die gleiche Leistung (UTC) erhalten:

$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"; 

Irgendwelche Ideen zu diesem Problem?

Antwort

2

unter Angabe der PHP manual on DateTime::createFromFormat():

Anmerkung: Die Zeitzone Parameter und die aktuelle Zeitzone werden ignoriert, wenn der Zeitparameter enthält entweder einen UNIX-Zeitstempel (zB 946.684.800) oder spezifiziert eine Zeitzone (zB 2010-01 -28T15: 00: 00 + 02: 00).

Wenn Sie die Zeitzone ändern möchten, müssen Sie die Methode setTimezone() verwenden, nachdem das Objekt erstellt wurde.

+0

Yeah Danke! Habe es für meinen Testcode arbeiten lassen. Jetzt muss ich überprüfen, was das Problem mit owncloud ist. Vielen Dank Mutch – Sebastian

+0

Wenn Sie mir danken wollen, upvote und akzeptiere meine Antwort. :) – Narf

+0

Erstellen von DateTime-Objekt aus timestamp = ein weiterer WTF-Moment in PHP. –

0

Leider wird tz beim Erstellen mit Mikrotom ignoriert. Verwenden Sie setTimezone fnc:

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