Kann mir jemand sagen, wie ich die im WordPress-Admin eingestellte Zeitzone erhalte?
Wenn das Blog beispielsweise auf Eastern Time eingestellt ist, benötige ich genau diese Zeichenfolge zum Ausdrucken:
US / Eastern
Dies ist für eine Funktion, die in functions.php in meinem Thema lebt.
Die unglückliche Situation ist, dass es in der Tat zwei verschiedene Möglichkeiten gibt:
timezone_string
, die Zeitzone im PHP-Stil spart.gmt_offset
, wodurch der numerische Float-Offset in Stunden eingespart wird.Aber in neueren Umgebungen
timezone_string
tatsächlich überschreibtgmt_offset
, wird der Wert von diesem zurückgegeben wird auf dem ehemaligen basieren. Das Gegenteil ist jedoch nicht der Fall -gmt_offset
kann gültig sein, solangetimezone_string
leer ist.Ich habe ziemlich viel Zeit mit diesen Dingen verbracht und die aktuellste Einstellung, die ich in meiner
WpDateTime
Bibliothek implementiert habe, ist folgende:Auf diese Weise wird in allen möglichen Fällen versucht, ein aussagekräftiges Zeitzonenobjekt zu instanziieren, sofern überhaupt Informationen verfügbar sind.
quelle
(int)
für $ Stunden undfloor
für $ Minuten problematisch? Laut Dokumentation,(int)
undfloor
sind fast gleich, außer(int)
wird -4,5 auf -4floor
runden und wird es auf -5 runden. Dies scheint, als würde es falsche negative Zeitzonenoffsets geben.Überprüfen Sie die Optionsreferenzseite . Die Option
gmt_offset
gibt eine Ganzzahl zurück. Wenn die Zeitzone beispielsweise auf Eastern Time (z. B. America / New_York) eingestellt ist,gmt_offset
sollte sie -5 sein.quelle
Denken Sie nicht, dass Sie eine Zeichenfolge wie US / Eastern erhalten, ohne alle gewünschten Zeichenfolgen in einem Array zu speichern und auf sie zu verweisen. Mit PHP können Sie die Abkürzung für die Zeitzone erhalten, dh EST ; Wenn Sie diese Werte in einem Array mit den gewünschten Zeichenfolgen gespeichert haben, können Sie sie nachschlagen.
quelle
Zum Bainternet hinzufügen (ich füge dies als Antwort hinzu, weil ich keine Kommentare abgeben kann - ich habe weniger als 50 Punkte auf dem WP Development Stack).
WordPress speichert eine Zeitzonenzeichenfolge nur, wenn Sie in den allgemeinen Einstellungen eine Zeitzonenzeichenfolge auswählen. Bei der UTF-Auswahl wird die Standardeinstellung in der Liste verwendet, Sie können jedoch einen Bildlauf bis zu Zeitzonenzeichenfolgen durchführen. Wenn Sie eine Zeitzonenzeichenfolge festlegen, werden sowohl die UTF- als auch die Zeitzonenzeichenfolge festgelegt. Sie sind identisch (dh, die UTF wird auf die neue Zone zurückgesetzt, wenn Sie eine Zeitzonenzeichenfolge auswählen).
(WordPress 4)
quelle
Es gibt einige Optionen, von denen keine wirklich gut funktioniert. Dies ist ein WordPress-Fehler, und es ist wirklich zum Kotzen, weil die Zeit falsch ist, es sei denn, Sie setzen Ihre Site auf UTC ... was verwirrend und nicht immer möglich ist.
Dieser nächste Code funktioniert meiner Meinung nach nur, wenn Sie Ihre Zeitzone (unter Einstellungen -> Allgemein in Admin) als benannte Stadt anstatt durch einen GMT-Nummernversatz auswählen. Ich habe das nicht getestet, aber es ist sehr gut möglich, dass festgelegt
get_option('gmt_offset')
wird, wannget_option('timezone_string')
nicht.Der Nachteil dabei ist, dass WordPress davon ausgeht, dass PHP bei der Erstellung von MySQL-Zeitstempeln auf UTC eingestellt ist, sodass Sie Ihre Datenbank ein wenig durcheinander bringen können, wenn Sie die Zeitzone wechseln! Ganz zu schweigen von anderen WP-Plugins kann davon ausgegangen werden, dass die PHP-Umgebung immer in UTC ist.
Wenn Sie also nur eine korrekte Uhrzeit wünschen, können Sie erzwingen, dass Ihr Zeitstempel in UTC angezeigt wird:
Leider wird die Zeitzone dadurch auf UTC gesetzt, obwohl dies korrekt ist.
Beachten Sie außerdem, dass Sie nicht sowohl das Flag "true" als auch die Standardfunktion "timezone_set" verwenden können.
Jede richtige Lösung wird ein Code-Snippet sein, das beide
gmt_offset
UND-Verknüpfungen berücksichtigttimezone_string
und sie verwendet, um eine Zeitzone für einige Eingaben festzulegen. WP geht davon aus, dass PHP bei der Ausführung von MySQL-Zeitstempeln auf UTC gesetzt ist und möglicherweise andere Plugins beschädigt.Es gibt eine solche Lösung auf https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ , aber auch dies ist ein BUG, daher sollten Sie den
get_post_time($date_format, TRUE)
Code verwenden, um einen Zeitstempel dafür zu erhalten ist eigentlich richtig.quelle
Angesichts der Tatsache, dass WordPress die Zeitzonenzeichenfolge in der Optionstabelle beibehält, können Sie die objektorientierte Methode verwenden, um die richtige Uhrzeit für Ihre WordPress-Site zu ermitteln:
quelle