Ich habe also die Liste der unterstützten Zeitzonen in PHP überprüft und mich gefragt, wie ich sie in die date()
Funktion aufnehmen kann. Vielen Dank!
Ich möchte keine Standardzeitzone, jeder Benutzer hat seine Zeitzone in der Datenbank gespeichert. Ich nehme diese Zeitzone des Benutzers und verwende sie. Wie? Ich weiß, wie man es aus der Datenbank nimmt, nicht wie man es benutzt.
Antworten:
Für eine solche Aufgabe sollten Sie wirklich die DateTime-Klasse von PHP verwenden. Bitte ignorieren Sie alle Antworten, die Ihnen empfehlen, date () oder date_set_time_zone zu verwenden. Es ist einfach schlecht und veraltet.
Ich werde Pseudocode verwenden, um zu demonstrieren, also versuchen Sie, den Code an Ihre Bedürfnisse anzupassen.
Angenommen, die Variable $ tz enthält den Zeichenfolgennamen einer gültigen Zeitzone und die Variable $ timestamp enthält den Zeitstempel, den Sie entsprechend der Zeitzone formatieren möchten, sieht der Code folgendermaßen aus:
$tz = 'Europe/London'; $timestamp = time(); $dt = new DateTime("now", new DateTimeZone($tz)); //first argument "must" be a string $dt->setTimestamp($timestamp); //adjust the object to correct timestamp echo $dt->format('d.m.Y, H:i:s');
Die DateTime-Klasse ist leistungsstark und um alle ihre Funktionen zu nutzen, sollten Sie einen Teil Ihrer Zeit damit verbringen, auf php.net darüber zu lesen. Um Ihre Frage vollständig zu beantworten - ja, Sie können den Zeitzonenparameter dynamisch anpassen (bei jeder Iteration beim Lesen aus der Datenbank können Sie ein neues DateTimeZone () -Objekt erstellen).
quelle
DateTime
Objekt geändert werden kann .Wenn ich richtig verstanden habe, müssen Sie zuerst die Zeitzone wie folgt einstellen:
date_default_timezone_set('UTC');
Und dann können Sie die Datumsfunktion verwenden:
// Prints something like: Monday 8th of August 2005 03:12:46 PM echo date('l jS \of F Y h:i:s A');
quelle
TIMESTAMP
Datentyp. Diese werden in UTC im Backend gespeichert, sodass sie in eine beliebige Zeitzone Ihrer Wahl konvertiert werden können.Verwenden Sie stattdessen die DateTime-Klasse , da sie Zeitzonen unterstützt. Das DateTime-Äquivalent von
date()
istDateTime::format
.Ein äußerst hilfreicher Wrapper für DateTime ist Carbon - sehen Sie es sich auf jeden Fall an.
Sie möchten als UTC in der Datenbank speichern und auf Anwendungsebene konvertieren.
quelle
setTimezone()
Funktionen dieser Klassen behandeln.Die obige Antwort hat mich veranlasst, durch einige Reifen / Fallstricke zu springen, also habe ich einfach den saubereren Code gepostet, der für mich funktioniert hat:
$dt = new DateTime(); $dt->setTimezone(new DateTimeZone('America/New_York')); $dt->setTimestamp(123456789); echo $dt->format('F j, Y @ G:i');
quelle
Es sollte so aussehen:
date_default_timezone_set('America/New_York');
quelle
das funktioniert 2019 perfekt:
date('Y-m-d H:i:s',strtotime($date. ' '.$timezone));
quelle
Versuche dies. Sie können entweder einen Unix-Zeitstempel oder eine Datums- / Uhrzeitzeichenfolge übergeben
public static function convertToTimezone($timestamp, $fromTimezone, $toTimezone, $format='Y-m-d H:i:s') { $datetime = is_numeric($timestamp) ? DateTime::createFromFormat ('U' , $timestamp, new DateTimeZone($fromTimezone)) : new DateTime($timestamp, new DateTimeZone($fromTimezone)); $datetime->setTimezone(new DateTimeZone($toTimezone)); return $datetime->format($format); }
quelle
Sie können einfach einen Zeitzonenunterschied zum Unix-Zeitstempel hinzufügen. Beispiel für Moskau (UTC + 3)
echo date('d.m.Y H:i:s', time() + 3 * 60 * 60);
quelle
Ich habe diese sehr einfache Funktion erstellt und sie funktioniert wie ein Zauber:
function ts2time($timestamp,$timezone){ /* input: 1518404518,America/Los_Angeles */ $date = new DateTime(date("d F Y H:i:s",$timestamp)); $date->setTimezone(new DateTimeZone($timezone)); $rt=$date->format('M d, Y h:i:s a'); /* output: Feb 11, 2018 7:01:58 pm */ return $rt; }
quelle
Oben nicht erwähnt. Sie können ein DateTime-Objekt auch erstellen, indem Sie im Konstruktor einen Zeitstempel als Zeichenfolge mit einem führenden @ -Zeichen angeben.
$dt = new DateTime('@123456789'); $dt->setTimezone(new DateTimeZone('America/New_York')); echo $dt->format('F j, Y - G:i');
Weitere Informationen zu zusammengesetzten Formaten finden Sie in der Dokumentation: https://www.php.net/manual/en/datetime.formats.compound.php
quelle
Sie können den Datenbankwert in der Funktion date_default_timezone_set, date_default_timezone_set (SOME_PHP_VARIABLE) ersetzen. muss sich aber nur um genaue Werte kümmern, die für die Zeitzonen relevant sind.
quelle