Konvertieren Sie UTC-Daten in PHP in Ortszeit

Lesezeit: 7 Minuten

Ich speichere die UTC-Daten in der DB mit:

$utc = gmdate("M d Y h:i:s A");

und dann möchte ich das gespeicherte UTC-Datum in die Ortszeit des Clients konvertieren.

Wie kann ich das machen?

Danke

Konvertieren Sie UTC Daten in PHP in Ortszeit
webjprgm

PHPs strtotime Die Funktion interpretiert Zeitzonencodes wie UTC. Wenn Sie das Datum von der Datenbank/dem Client ohne den Zeitzonencode erhalten, aber wissen, dass es sich um UTC handelt, können Sie es anhängen.

Angenommen, Sie erhalten das Datum mit Zeitstempelcode (wie “Fr 23. März 2012 22:23:03 GMT-0700 (PDT)”, was der Javascript-Code ist ""+(new Date()) gibt):

$time = strtotime($dateWithTimeZone);
$dateInLocal = date("Y-m-d H:i:s", $time);

Oder wenn Sie dies nicht tun, was wahrscheinlich von MySQL stammt, dann:

$time = strtotime($dateInUTC.' UTC');
$dateInLocal = date("Y-m-d H:i:s", $time);

  • Das zweite Code-Snippet ist das, was ich brauchte, um die Ausgabe von sqlite’s zu konvertieren datetime() Funktion von UTC nach Ortszeit.

    – fuenfundachtzig

    6. Oktober 14 um 13:10 Uhr

  • Danke, du hast meine Stunden gespart.

    – Abbas

    12. Dezember 15 um 10:49 Uhr

  • Vielen Dank für diese ‘UTC’-Endzeichenfolge.

    – Jeaf Gilbert

    13. November 18 um 10:48 Uhr

Konvertieren Sie UTC Daten in PHP in Ortszeit
Timo Huovinen

Wenn Sie mit Client den Browser meinen, müssen Sie zuerst den Zeitzonennamen vom Browser an PHP senden und dann die Konvertierung wie unten beschrieben durchführen.

Antworten

Konvertieren Sie die UTC-Datumszeit in Amerika/Denver

// create a $dt object with the UTC timezone
$dt = new DateTime('2016-12-12 12:12:12', new DateTimeZone('UTC'));

// change the timezone of the object without changing its time
$dt->setTimezone(new DateTimeZone('America/Denver'));

// format the datetime
$dt->format('Y-m-d H:i:s T');

Dies funktioniert mit Daten nach 2032, Sommerzeit und Schaltsekunden und hängt nicht vom Gebietsschema oder der Zeitzone des Hostcomputers ab.

Es verwendet die Zeitzonendatenbank, um die Berechnung durchzuführen, diese Datenbank ändert sich im Laufe der Zeit, wenn sich die Zeitzonenregeln ändern, und muss auf dem neuesten Stand gehalten werden. (siehe Anmerkungen ganz unten)

Um das UTC-Datum in die (lokale) Serverzeit umzuwandeln, können Sie verwenden DateTime ohne das zweite Argument, das standardmäßig die Zeitzone des Servers ist.

// create a $dt object with the UTC timezone
$dt = new DateTime('2016-12-12 12:12:12', new DateTimeZone('UTC'));

// get the local timezone
$loc = (new DateTime)->getTimezone();

// change the timezone of the object without changing its time
$dt->setTimezone($loc);

// format the datetime
$dt->format('Y-m-d H:i:s T');

Antwort 2

Ich empfehle die Verwendung DateTimeImmutable weil es Variablen nicht mutiert (sie nicht hinter den Kulissen ändert), ansonsten funktioniert es genauso DateTime.

// create a $dt object with the UTC timezone
$dt_utc = new DateTimeImmutable('2016-12-12 12:12:12', new DateTimeZone('UTC'));

// Create a new instance with the new timezone
$dt_denver = $dt_utc->setTimezone(new DateTimeZone('America/Denver'));

// format the datetime
$dt_denver->format('Y-m-d H:i:s T');

Die Unveränderlichkeit ermöglicht es Ihnen, die Verkettung mehrmals zu verwenden, ohne den Wert von zu ändern $dt

$dt = new DateTimeImmutable('2016-12-12 12:12:12', new DateTimeZone('UTC'));

// Format $dt in Denver timezone
echo $dt->setTimezone(new DateTimeZone('America/Denver'))->format('Y-m-d H:i:s T');

// Format $dt in Madrid timezone
echo $dt->setTimezone(new DateTimeZone('Europe/Madrid'))->format('Y-m-d H:i:s T');

// Format $dt in Local server timezone
echo $dt->setTimezone((new DateTime())->getTimezone())->format('Y-m-d H:i:s T');

Anmerkungen

time() gibt die zurück Unix-Zeitstempelwas eine Zahl ist, hat sie keine Zeitzone.

date('Y-m-d H:i:s T') gibt das Datum in der Zeitzone des aktuellen Gebietsschemas zurück.

gmdate('Y-m-d H:i:s T') gibt das Datum in UTC zurück

date_default_timezone_set() ändert die aktuelle Gebietsschema-Zeitzone

um eine Zeit in einer Zeitzone zu ändern

// create a $dt object with the America/Denver timezone
$dt = new DateTime('2016-12-12 12:12:12', new DateTimeZone('America/Denver'));

// change the timezone of the object without changing it's time
$dt->setTimezone(new DateTimeZone('UTC'));

// format the datetime
$dt->format('Y-m-d H:i:s T');

Hier sehen Sie alle verfügbaren Zeitzonen

https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

Hier sind alle Formatierungsoptionen

http://php.net/manual/en/function.date.php

Aktualisieren Sie die PHP-Zeitzonen-DB (in Linux)

sudo pecl install timezonedb

Aufgrund der Sommerzeit wiederholen sich einige Datumsangaben in einigen Zeitzonen, beispielsweise ist in den USA der 13. März 2011, 2:15 Uhr nie aufgetreten, während der 6. November 2011, 1:15 Uhr, zweimal aufgetreten ist. Diese Datetimes können nicht genau bestimmt werden.

  • Dies beantwortet tatsächlich die Frage, anstatt anzubieten, “wie man die Ortszeit erhält”.

    – ChristoKiwi

    23. Oktober 17 um 20:54 Uhr

  • Dies ist die richtige Antwort, da die Änderung der Zeitzone des $dt-Objekts den Sommerzeit-Offset ZUM ZEITPUNKT DES OBJEKTS korrekt mitzählt (und nicht zur aktuellen Ortszeit, wenn der Code ausgeführt wird).

    – Bytebereich

    07.09.19 um 13:00 Uhr

  • Das ist genau das, wonach ich gesucht habe. Danke schön.

    – HartleySan

    3. Januar 20 um 14:26 Uhr

Hier teile ich das Skript, konvertiere den UTC-Zeitstempel in den indischen Zeitstempel: –

    // create a $utc object with the UTC timezone
    $IST = new DateTime('2016-12-12 12:12:12', new DateTimeZone('UTC'));

    // change the timezone of the object without changing it's time
    $IST->setTimezone(new DateTimeZone('Asia/Kolkata'));

    // format the datetime
   echo $IST->format('Y-m-d H:i:s T');

Die Datumsarithmetik ist nicht erforderlich, wenn Sie nur denselben Zeitstempel in verschiedenen Zeitzonen anzeigen möchten:

$format = "M d, Y h:ia";
$timestamp = gmdate($format);

date_default_timezone_set("UTC");
$utc_datetime = date($format, $timestamp);

date_default_timezone_set("America/Guayaquil");
$local_datetime = date($format, $timestamp);

date() und localtime() beide verwenden die lokale Zeitzone für den Server, sofern sie nicht außer Kraft gesetzt wird; Sie können die verwendete Zeitzone mit überschreiben date_default_timezone_set().

http://www.php.net/manual/en/function.date-default-timezone-set.php

http://us3.php.net/manual/en/function.date.php

http://php.net/manual/en/function.localtime.php

  • Aber wie bekomme ich den aktuellen UTC-Zeitstempel?

    – Markieren

    25. September 10 um 1:35 Uhr

  • Warum benötigen Sie den aktuellen UTC-Zeitstempel, um den gespeicherten UTC-Zeitstempel zu konvertieren?

    – Bernstein

    25. September 10 um 1:35 Uhr

  • Aber wenn du es tust, time() gibt immer UTC zurück: us2.php.net/manual/en/function.time.php

    – Bernstein

    25. September 10 um 1:36 Uhr

  • date(), localtime() usw. beantworten die Frage nicht, da das Schlüsselwort der Frage “UTC” ist und hier fehlt. Die Frage ist in der Tat sehr einfach: Wie rechnet man eine UTC-Zeit in die Ortszeit um.(Beliebig Zeit, nicht die aktuelle Zeit.) Siehe weiter unten meine Antwort.

    – Apostolos

    15. Juni 17 um 08:11 Uhr

1643907247 677 Konvertieren Sie UTC Daten in PHP in Ortszeit
fijiaaron

Holen Sie sich zuerst das Datum in UTC – das haben Sie bereits getan, also wäre dieser Schritt wirklich nur ein Datenbankaufruf:

$timezone = "UTC";
date_default_timezone_set($timezone);

$utc = gmdate("M d Y h:i:s A");
print "UTC: " . date('r', strtotime($utc)) . "n";

Stellen Sie als Nächstes Ihre lokale Zeitzone in PHP ein:

$timezone = "America/Guayaquil";
date_default_timezone_set($timezone);

Und jetzt erhalten Sie den Offset in Sekunden:

$offset = date('Z', strtotime($utc));
print "offset: $offset n";

Fügen Sie schließlich den Offset zum ganzzahligen Zeitstempel Ihrer ursprünglichen Datumszeit hinzu:

print "LOCAL: " . date('r', strtotime($utc) + $offset) . "n";

  • Aber wie bekomme ich den aktuellen UTC-Zeitstempel?

    – Markieren

    25. September 10 um 1:35 Uhr

  • Warum benötigen Sie den aktuellen UTC-Zeitstempel, um den gespeicherten UTC-Zeitstempel zu konvertieren?

    – Bernstein

    25. September 10 um 1:35 Uhr

  • Aber wenn du es tust, time() gibt immer UTC zurück: us2.php.net/manual/en/function.time.php

    – Bernstein

    25. September 10 um 1:36 Uhr

  • date(), localtime() usw. beantworten die Frage nicht, da das Schlüsselwort der Frage “UTC” ist und hier fehlt. Die Frage ist in der Tat sehr einfach: Wie rechnet man eine UTC-Zeit in die Ortszeit um.(Beliebig Zeit, nicht die aktuelle Zeit.) Siehe weiter unten meine Antwort.

    – Apostolos

    15. Juni 17 um 08:11 Uhr

1643907248 710 Konvertieren Sie UTC Daten in PHP in Ortszeit
whund

Ich speichere Daten in der DB im UTC-Format, aber dann zeige ich sie dem Endbenutzer in seiner lokalen Zeitzone

// retrieve
$d = (new DateTime($val . ' UTC'))->format('U');
return date("Y-m-d H:i:s", $d);

  • Wie unterscheidet sich dies von der oben gegebenen Antwort?

    – Martin

    21. September 16 um 9:12 Uhr

  • Wenn Sie Ihre Verwendung der neueren PHP-DateTime-Klasse umschreiben und erweitern wollten, könnte Ihre Antwort tatsächlich eine neue einzigartige Möglichkeit sein, das gewünschte Ergebnis zu erzielen.

    – Martin

    21. September 16 um 9:13 Uhr

.

757750cookie-checkKonvertieren Sie UTC-Daten in PHP in Ortszeit

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy