Ich brauche eine einfache Möglichkeit, einen Datums- / Zeitstempel HOFFNUNGSFREI in UTC zu konvertieren (aus welcher Zeitzone sich der Server auch befindet), ohne Bibliotheken zu verwenden.
88
Probieren Sie getTimezone und setTimezone aus , siehe Beispiel
(Dies verwendet jedoch eine Klasse)
AKTUALISIEREN:
Ohne Unterricht könnten Sie so etwas ausprobieren:
$the_date = strtotime("2010-01-19 00:00:00");
echo(date_default_timezone_get() . "<br />");
echo(date("Y-d-mTG:i:sz",$the_date) . "<br />");
echo(date_default_timezone_set("UTC") . "<br />");
echo(date("Y-d-mTG:i:sz", $the_date) . "<br />");
HINWEIS: Möglicherweise müssen Sie auch die Zeitzone auf das Original zurücksetzen
gmdate
anstatt die Standardzeitzone auf UTC zu ändern. Weilgmdate
automatisch UTC verwendet.Verwenden Sie strtotime , um einen Zeitstempel aus der angegebenen Zeichenfolge (interpretiert als Ortszeit) zu generieren, und verwenden Sie gmdate , um ihn als formatiertes UTC-Datum zurückzugewinnen.
Beispiel
Wie gewünscht, hier ein einfaches Beispiel:
quelle
Verwenden von DateTime:
quelle
Gehen Sie folgendermaßen vor:
oder einfach
um "JETZT" in UTC zu bekommen.
Überprüfen Sie die Referenz:
http://www.php.net/manual/en/function.gmdate.php
quelle
Wenn Sie ein Datum in diesem Format haben JJJJ-MM-HH TT: MM: SS, können Sie PHP tatsächlich austricksen, indem Sie am Ende Ihrer "Datums- / Uhrzeit-Zeichenfolge" eine UTC hinzufügen und diese mit strtotime konvertieren.
Dies wird dies drucken:
Und wie Sie sehen, wird auch das Problem der Sommerzeit behoben.
Ein etwas seltsamer Weg, um es zu lösen .... :)
quelle
:D
Konvertieren Sie die lokale Zeitzonenzeichenfolge in eine UTC-Zeichenfolge.
zB neuseeländische Zeitzone
wenn $ datetime = "2016-02-01 00:00:01", $ output = "2016-01-31 11:00:01";
if $ datetime = "2016-02-29 23:59:59", $ output = "2016-02-29 10:59:59";
wenn $ datetime = "2016-05-01 00:00:01", $ output = "2016-04-30 12:00:01";
if $ datetime = "2016-05-31 23:59:59", $ output = "2016-05-31 11:59:59";
https://en.wikipedia.org/wiki/Time_in_New_Zealand
quelle
Da strtotime ein bestimmtes Eingabeformat erfordert, kann DateTime :: createFromFormat verwendet werden ( PHP 5.3+ ist erforderlich ).
quelle
Ich benutze manchmal diese Methode:
Funktioniert
alleMOST der Zeit.quelle
Wenn es Ihnen nichts ausmacht, die DateTime- Klasse von PHP zu verwenden , die seit PHP 5.2.0 verfügbar ist, gibt es verschiedene Szenarien, die zu Ihrer Situation passen könnten:
Wenn Sie ein
$givenDt
DateTime-Objekt haben, das Sie in UTC konvertieren möchten, wird es in UTC konvertiert:Wenn Sie das Original
$givenDt
später benötigen , können Sie alternativ das angegebene DateTime-Objekt klonen, bevor Sie das geklonte Objekt konvertieren:Wenn Sie beispielsweise nur eine datetime-Zeichenfolge haben,
$givenStr = '2018-12-17 10:47:12'
erstellen Sie zuerst ein datetime-Objekt und konvertieren es dann. Beachten Sie, dass dies$givenStr
in der konfigurierten Zeitzone von PHP liegt.Wenn sich die angegebene Datums- / Uhrzeitzeichenfolge in einer anderen Zeitzone als in Ihrer PHP-Konfiguration befindet, erstellen Sie das Datums- / Uhrzeitobjekt, indem Sie die richtige Zeitzone angeben (siehe Liste der von PHP unterstützten Zeitzonen ). In diesem Beispiel nehmen wir die lokale Zeitzone in Amsterdam an:
quelle
http://php.net/manual/en/function.strtotime.php oder wenn Sie stattdessen keine Zeichenfolge, sondern Zeitkomponenten verwenden müssen, dann http://us.php.net/manual/en/function.mktime. php
quelle
Mit PHP 5 oder höher können Sie die Funktion datetime :: format verwenden (siehe Dokumentation http://us.php.net/manual/en/datetime.format.php ).
quelle
Versuchen
wird ausgegeben:
Sie sollten die Formatierungszeit ändern, um andere Ausgaben anzuzeigen
quelle
Allzweck-Normalisierungsfunktion zum Formatieren eines Zeitstempels von einer Zeitzone zu einer anderen. Sehr nützlich zum Speichern von Datenzeitstempeln von Benutzern aus verschiedenen Zeitzonen in einer relationalen Datenbank. Für Datenbankvergleiche speichern Sie den Zeitstempel als UTC und verwenden Sie ihn mit
gmdate('Y-m-d H:i:s')
Verwendung:
quelle
Alternativ können Sie dies versuchen:
Dies wird Folgendes ausgeben:
Sie können dies innerhalb des value-Attributs eines Texteingabefelds verwenden, wenn Sie nur ein schreibgeschütztes Datum anzeigen möchten.
Entfernen Sie das 'e', wenn Sie Ihre Region / Ihr Land nicht anzeigen möchten.
quelle
Führen Sie die folgenden Schritte aus, um die UTC-Zeit einer im lokalen System des Benutzers festgelegten Zeitzone abzurufen (dies ist erforderlich, damit Webanwendungen verschiedene Zeitzonen in UTC speichern können):
Javascript (clientseitig):
PHP (serverseitig):
quelle
Als Verbesserung von Phill Paffords Antwort (ich verstand sein 'Yd-mTG: i: sz' nicht und er schlug vor, die Zeitzone zurückzusetzen). Also schlage ich Folgendes vor (ich habe es kompliziert, indem ich das HMTL-Format in Klartext geändert habe ...):
quelle