2013-05-25 20 views
10

Ich habe einen Unix-Timestamp, der auf +5 gesetzt ist, aber ich möchte es in -5, EST Standardzeit konvertieren. Ich würde einfach den Zeitstempel in dieser Zeitzone erzeugen lassen, aber ich nehme ihn von einer anderen Quelle, die es auf +5 setzt.Unix Timestamp in Zeitzone konvertieren?

Aktuelle Unveränderte Zeitstempel, der in einem Datum

<? echo gmdate("F j, Y, g:i a", 1369490592) ?> 

Antwort

30

Verwendung DateTime und DateTimeZone Umbau:

$dt = new DateTime('@1369490592'); 
$dt->setTimeZone(new DateTimeZone('America/Chicago')); 
echo $dt->format('F j, Y, g:i a'); 

See it in action

+3

perfekt gearbeitet. Danke =) –

+0

Korrigiere mich, wenn ich falsch liege @John Sicherlich funktioniert das nicht? Diese Methode verwendet die Standardzeitzone des Systems (PHP Config), die sie beim Erstellen der Instanz des DateTime-Objekts nicht angegeben hat. Wie [hier] (http://stackoverflow.com/a/17098897/234631). Also, wenn man nach Amerika/Chicago umwandelt, würde es gegen die Systemzeitzone geändert werden, vorausgesetzt, es ist nicht dasselbe wie +5 wie der UNIX-Zeitstempel selbst, den er versucht, um ~ 10 Zonen zu ändern? –

+1

@Stefan Das ist in der Tat falsch. Unix-Zeitstempel sind immer UTC. Einige lustige Codebeispiele: ini_set ('date.timezone', 'America/Los_Angeles'); $ now = time(); $ utc = neue DateTime ("@ {$ now}", neue DateTimeZone ('America/New_York')); echo "{$ utc-> format ('c')} \ n"; // 2014-08-27T15: 24: 09 + 00: 00 $ utc = neue DateTime ("@ {$ now}"); echo "{$ utc-> format ('c')} \ n"; // 2014-08-27T15: 24: 09 + 00: 00 ini_set ('date.timezone', 'UTC'); $ utc = neue DateTime ("@ {$ now}", neue DateTimeZone ('UTC')); echo "{$ utc-> format ('c')} \ n"; // 2014-08-27T15: 24: 09 + 00: 00 –

0

Wie weil bearbeiten Warteschlange für John Conde's answer voll ist ich ausführlichere hinzufügen würde Antworten.

Von DateTime::__construct(string $time, DateTimeZone $timezone)

Die $ Zeitzone Parameter und die aktuelle Zeitzone werden ignoriert, wenn die $ Zeitparameter entweder ist ein UNIX-Zeitstempel (zB @ 946.684.800) ...

Dies ist Hauptgrund, warum sollten Sie immer Zeitzone, auch Standard, beim Erstellen DateTime Objekte aus Unix-Timestamp angeben. Siehe erklärt John Conde's answer inspiriert Code:

$dt = new DateTime('@1369490592'); 

// use your default timezone to work correctly with unix timestamps 
// and in line with other parts of your application 
date_default_timezone_set ('America/Chicago'); // somewhere on bootstrapping time 
… 
$dt->setTimeZone(new DateTimeZone(date_default_timezone_get())); 

// set timezone to convert time to the other timezone 
$dt->setTimeZone(new DateTimeZone('America/Chicago')); 

echo $dt->format('F j, Y, g:i a'); 
0

Ein einfacher Weg, dies zu tun ist:

Während gmdate() verwenden, fügen Sie in Sekunden, um Ihre Zeitzone in gmdate unix_stamp.

Betrachten Sie meine Zeitzone ist GMT + 5: 30. So 5 h 30 min in Sekunden wird

Also, ich werde dies tun:

gmdate("F j, Y, g:i a", 1369490592+19800)

Verwandte Themen