2009-06-18 8 views
0

Es scheint, gibt es viele Möglichkeiten, Datum und Uhrzeit massaging in PHP nähern. Ich bin normalerweise nur mit Ortszeit beschäftigt. Heute muss ich in UTC arbeiten.Welche PHP-Datum und Zeit-Tools für GMT Offset verwenden

ich gegen eine API bin Abfrage, die Daten, die sie mir über einen beliebigen Datensatz geben ist: erstellt: Do, 18. Juni 2009 21.44.49 0.000 * Dokumentierte als ‚UTC Rekord Erstellungszeit‘

UTC_Offset: -28.800 * Differenz zwischen den Benutzern wieder

ich brauche, dass der Benutzer zu welcher Zeit und Datum zu zeigen, die Daten in einer einfachen Zeichenfolge konvertieren wurde in ihrer Ortszeit vorgelegt.

Ich glaube, über das übersetzt, wenn in Kalifornien zum Beispiel:. Donnerstag 18. Juni 2009 02.44.49

Mein Ziel auf einen Zeitwert zu erhalten ist, die ich bisher passieren kann () für die einfache Formatierung in einem "hübschen" Format.

Ist es wirklich so einfach wie das Konvertieren der oben erstellten Zeit in Sekunden aus der Epoche, das Hinzufügen des Offsets und das anschließende Übergeben an das Datum()? Irgendwelche Gotchas, auf die du achten musst?

$created_time = 'Thu, 18 Jun 2009 21:44:49 +0000'; 
$utc_offset = -28800; 
$seconds = strtotime($created_time); 
$localized_time = $seconds + $utc_offset; 

echo date(DATE_RFC822, $localized_time); 

Dank

Antwort

2

PHP, was für Sie automatisch tun sollten. Ich kann auch sehr empfehlen, stattdessen das DateTime-Objekt zu verwenden.

$dt = new DateTime($created_time); echo $dt->format(DATE_RFC2822);

PHP Datum und Uhrzeit Funktionen sind Zeitzone bewusst .. Vergewissern Sie sich auf eine aktuelle Version von PHP, weil eine Menge Arbeit bei der Verbesserung dieser Systeme durchgeführt.

+0

Danke. Das DateTime-Objekt-Handbuch ist ziemlich tief, ich werde es überprüfen. Was ich aber immer noch mache, ist, wie man mit dem Offset richtig umgehen kann. Ich habe aus der Dokumentation, was ein UTC-Wert für $ created_time sein soll. Der einzige andere Datum/Uhrzeit-Wert, den ich bekomme, ist ein Offset. Benutzerdaten kommen von überall auf der Welt, der Offset ist unterschiedlich, je nachdem, in welcher Zone sie sind. Ich nehme an, dass ich das Objekt nur auf Sekunden verschiebe, den Offset hinzufüge und das in eine hübsche Zeichenkette umwandle? –

+0

Die Idee ist sowohl mit DateTime als auch mit strtotime, wenn Sie die Zeitzone in einem Standardformat angeben, wird es automatisch in Ihre eigene Zeitzone umgewandelt. Anders herum (siehe den zweiten Kommentar), indem Sie die Standardzeitzone vorübergehend ändern oder dem DateTime-Objekt ein DateTimeZone-Objekt geben – Evert

0

Sie können date_default_timezone_set verwenden, um zwischen Zeitzonen zu wechseln. In Ihrem Fall würden Sie die Zeitzoneninformationen aus dem Benutzerprofil übergeben. Als Evert empfohlen, wenn Sie PHP 5> = 5.2 verwenden, verwenden Sie bitte die erweiterte Klasse.

<?php 
echo date('h:i:s')."\n"; 
date_default_timezone_set('Europe/Paris'); 
echo date('h:i:s')."\n"; 
date_Default_timezone_set('UTC'); 
echo date('h:i:s')."\n"; 
+0

Danke. Ich bekomme nur einen Offset, die Zeitzone Daten, die ich bekomme, ist nicht in einer Weise von PHP "Liste der unterstützten Zeitzonen" formatiert. Ich würde diese Daten lieber nicht massieren und dann riskieren, dass sie sich ändern. Was denkst du darüber, den Offset zu nehmen, und Zuordnung zu jedem der Werte "date_default_timezone_set()" akzeptiert? Oder gibt es vielleicht eine Funktion, die mir fehlt, die das schon tut? –

+3

Wenn Sie den Offset haben, konvertieren Sie ihn einfach in Stunden und verwenden Sie einen der Zeitzonen hier: http://us2.php.net/manual/en/timezones.others.php.In Ihrem Beispiel $ utc_offset = -28800; wäre (-28800/3600) = -8 also 'Etc/GMT-8' ist was du willst. –

Verwandte Themen