Wie bekomme ich die WordPress-Zeitzoneneinstellung?
7 Antworten
- Stimmen
-
- 2011-02-02
Wenn Sie dengmt_offsetbenötigen,dann
<?php echo get_option('gmt_offset'); ?>
Diesgibt Ihneneine Ganzzahl wie 2 oder -2 .
und wenn Sie die Zeitzonenzeichenfolgebenötigen,verwenden Sie
<?php echo get_option('timezone_string'); ?>
Diesgibt Ihneneine Zeichenfolge wie America/Indianapolis
if you need the gmt_offset then
<?php echo get_option('gmt_offset'); ?>
this will give you an integer like 2 or -2.
and if you need the timezone string use
<?php echo get_option('timezone_string'); ?>
this will give you a string like America/Indianapolis
-
Meine Zeitzonenzeichenfolgebefindet sichin der Datenbank,istjedoch leer,auchnachdem auf der Einstellungsseiteeine andere Zeitzone ausgewählt wurde.Was könnte der Fall sein?(WP3.6)My timezone_string is in the database but it is empty, even after selecting a different timezone on the settings page. What might be the case? (WP3.6)
- 7
- 2013-09-13
- user2019515
-
Berücksichtigtgmt_offest die Sommerzeitbasierend auf der Zeitzoneneinstellung der Site?Does gmt_offest take daylight savings into account based on the site's timezone setting?
- 0
- 2013-12-19
- squarecandy
-
@ user2019515 Wenn Sieeine Stadt als Zeitzone auswählen,wird diesein der Option "timezone_string"gespeichert. Wenn Siejedocheinen manuellen Versatz (z. B. UTC + 1) auswählen,wird siein der Option "gmt_offset" (als "1") undtimezone_stringgespeichertbleibt leer@user2019515 If you choose a city as a timezone it will save to the "timezone_string" option but if you choose a Manual Offset (UTC+1 for instance) it is saved to the "gmt_offset" option (as "1") and timezone_string remains empty.
- 7
- 2017-03-27
- Berend
-
- 2017-10-16
Die unglückliche Situationist,dassestatsächlich zwei verschiedene Optionengibt:
- Neuere
timezone_string
,wodurch die Zeitzoneim PHP-Stilgespeichert wird. - Älterer
gmt_offset
,wodurch dernumerische Float-Offsetin Stundengespeichert wird.
Inneueren Umgebungen überschreibt
timezone_string
tatsächlichgmt_offset
,der von letzterem zurückgegebene Wertbasiert auf demersteren. Das Gegenteil istjedochnicht wahr -gmt_offset
istmöglicherweisegültig,währendtimezone_string
leerist.WordPress 5.3 hatte die Funktion
wp_timezone()
ausgeliefert,das dies abstrahiert undein gültigesDateTimeZone
-Objekt zurückgibt,unabhängig von den zugrunde liegenden WP-Einstellungen.Vorher hatteicheine Version davonin meiner
WpDateTime
-Bibliothek implementiert (für Trivia,die als Grundlagefür die Kernimplementierung verwendet wurden):class WpDateTimeZone extends \DateTimeZone { /** * Determine time zone from WordPress options and return as object. * * @return static */ public static function getWpTimezone() { $timezone_string = get_option( 'timezone_string' ); if ( ! empty( $timezone_string ) ) { return new static( $timezone_string ); } $offset = get_option( 'gmt_offset' ); $hours = (int) $offset; $minutes = abs( ( $offset - (int) $offset ) * 60 ); $offset = sprintf( '%+03d:%02d', $hours, $minutes ); return new static( $offset ); } }
The unfortunate situation is that there are indeed two different options:
- Newer
timezone_string
, which saves PHP–style time zone. - Older
gmt_offset
, which saves numeric float offset in hours.
But in newer environments
timezone_string
actually overridesgmt_offset
, the value returned by the latter will be based on the former. However the opposite isn't true —gmt_offset
might be valid, whiletimezone_string
is empty.WordPress 5.3 had shipped
wp_timezone()
function, that abstracts this and returns a validDateTimeZone
object, regardless of underlying WP settings.Before that I had a take on it implemented in my
WpDateTime
library (for trivia that was used as a basis for core implementation):class WpDateTimeZone extends \DateTimeZone { /** * Determine time zone from WordPress options and return as object. * * @return static */ public static function getWpTimezone() { $timezone_string = get_option( 'timezone_string' ); if ( ! empty( $timezone_string ) ) { return new static( $timezone_string ); } $offset = get_option( 'gmt_offset' ); $hours = (int) $offset; $minutes = abs( ( $offset - (int) $offset ) * 60 ); $offset = sprintf( '%+03d:%02d', $hours, $minutes ); return new static( $offset ); } }
-
Dies sollte die akzeptierte Antwort sein.Menschen werden auf Fehler stoßen,wenn sie sich ausschließlich aufget_option ('timezone_string') verlassen.This should be the accepted answer. People will run into bugs if they rely solely on get_option('timezone_string').
- 1
- 2018-08-14
- DiscoInfiltrator
-
Diesist die richtige Antwort.This is the correct answer.
- 0
- 2018-12-09
- Lucas Bustamante
-
Ist die Verwendung von "(int)"für $ Stunden und "Etage"für $ Minutennichtproblematisch?Laut Dokumentation sind "(int)" und "Etage"fastgleich,außer dass "(int)" -4,5 auf -4 und "Etage" auf -5 rundet.Dies scheint,als würdeesfalschenegative Zeitzonenversätzegeben?Isnt use of `(int)` for $hours and `floor` for $minutes problematic? According to documentation, `(int)` and `floor` are almost the same except `(int)` will round -4.5 to -4 and `floor` will round it to -5. This seems like it will give incorrect negative timezone offsets?
- 0
- 2019-05-13
- Mikepote
-
@ Mikepote Ja,das wurde vor langer Zeitin der Bibliothekbehoben,nureine veraltete Kopie des Codesin der Antwort hier.@Mikepote yeah, this was fixed in the lib a long time ago, just stale copy of the code in the answer here.
- 1
- 2019-05-15
- Rarst
-
Ohmein Gott,warum haben siees soimplementiert ... Es hatmicheine volle Stundegekostet *tilt *Oh my god why did they implement it like this .... It costed me a full hour *tilt*
- 0
- 2019-06-21
- Blackbam
-
Behandelt die Bibliothek die Tatsache,dasseine Zeitzonemehrere Offsetsenthalten kann?Siehe: https://stackoverflow.com/tags/timezone/infoDoes the lib handle the fact that one timezone can contain multiple offsets? See: https://stackoverflow.com/tags/timezone/info
- 0
- 2019-11-27
- DarkNeuron
-
@DarkNeuron lib überlässt dasnur PHP,das die olson-Datenbankenthält und verwendet.@DarkNeuron lib just leaves that to PHP, which includes and uses olson database.
- 0
- 2019-11-29
- Rarst
-
- 2011-02-02
Überprüfen Sie die Optionsreferenzseite .Die Option
gmt_offset
gibt eine Ganzzahl zurück.Wennbeispielsweise die Zeitzone auf Eastern Timeeingestelltist (z. B. America/New_York),solltegmt_offset
-5 sein.Check the Option Reference page. The option
gmt_offset
returns an integer. For example, if the timezone is set to Eastern time (e.g. America/New_York),gmt_offset
should be -5. -
- 2011-02-03
Denken Sienicht,dass Sieeine Zeichenfolge wie US/Eastern erhalten,ohne allegewünschten Zeichenfolgenin einem Array zu speichern und auf sie zu verweisen.Mit PHP können Sie die Zeitzonenabkürzungerhalten,dh EST ;Wenn Sie diese Wertein einem Arraymit dengewünschten Zeichenfolgengespeichert haben,können Sie sienachschlagen.
<?php date_default_timezone_set(get_option('timezone_string')); echo date('T'); // will give you three-character string like "EST" $timezones = array ( 'EST' => 'US/Eastern', 'CST' => 'US/Central', // etc, etc, etc. ); echo $timezones [ date('T') ]; // should be what you want. ?>
Don't think you're gonna get a string like US/Eastern without storing all the strings you want in an array and referring to them. Using PHP you can get the timezone abbreviation, ie EST; and if you have those values stored in an array with the strings you want, you can look them up.
<?php date_default_timezone_set(get_option('timezone_string')); echo date('T'); // will give you three-character string like "EST" $timezones = array ( 'EST' => 'US/Eastern', 'CST' => 'US/Central', // etc, etc, etc. ); echo $timezones [ date('T') ]; // should be what you want. ?>
-
Diesistnichterforderlich.Die [Zeitzonenstandards] (http://php.net/manual/en/timezones.php) sind seit 5.2 Teil von PHP,ebenso wie das [DateTimeZone-Objekt] (http://php.net/manual/en/).datetimezone.getname.php) und die zugehörigen Standardfunktionen.This is unnecessary. The [timezone standards](http://php.net/manual/en/timezones.php) have been part of PHP since 5.2, as has the [DateTimeZone object](http://php.net/manual/en/datetimezone.getname.php) and the related standard functions.
- 0
- 2018-10-24
- haz
-
- 2019-08-05
Angesichts der Tatsache,dass WordPress die Zeitzonenzeichenfolgein der Optionstabellebeibehält,können Sie die objektorientierte Methode verwenden,um die richtige Zeit auf Ihrer WordPress-Site zuermitteln:
$tz = new DateTimeZone(get_option('timezone_string')); $dt = new DateTime("now", $tz); $page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";
Given the fact that wordpress keeps the timezone string in the options table, you can use the object oriented way of getting the right time on your wordpress site:
$tz = new DateTimeZone(get_option('timezone_string')); $dt = new DateTime("now", $tz); $page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";
-
- 2014-12-11
Zum Bainternet hinzufügen (Ichfüge dies als Antwort hinzu,daich keinen Kommentar abgeben kann -ich habe weniger als 50 Punkte auf dem WP-Entwicklungsstapel).
WordPress speicherteine Zeitzonenzeichenfolgenur,wenn Siein den allgemeinen Einstellungeneine Zeitzonenzeichenfolge auswählen.Bei der UTF-Auswahl wird standardmäßigin der Liste angegeben,Sie könnenjedochbis zu Zeitzonenzeichenfolgen scrollen.Wenn Sieeine Zeitzonenzeichenfolgefestlegen,werden sowohl die UTF- als auch die Zeitzonenzeichenfolgefestgelegt.Sie sindgleich (dh,die UTF wird auf dieneue Zone zurückgesetzt,wenn Sieeine Zeitzonenzeichenfolge auswählen).
(WordPress 4)
To add to Bainternet (I am adding this as an answer because I cannot comment -- I have less than 50 points on WP Development stack).
WordPress will only store a timezone string if you select a timezone string in the general settings. UTF selection is where it defaults in the list, but you can scroll way up to timezone strings. If you set a timezone string, both the UTF and the Timezone string will be set. They will be the same (meaning, the UTF gets reset to the new zone when you select a timezone string timezone).
(WordPress 4)
-
- 2015-11-06
Esgibt einige Optionen,von denen keine wirklichgutfunktioniert. Diesistein WordPress-Fehler,der wirklich scheißeist,weil die Zeitfalschist,es sei denn,Sie setzen Ihre Site auf UTC ... was verwirrend undnichtimmermöglichist.
Diesernächste Codefunktioniertmeiner Meinungnachnur,wenn Sie Ihre Zeitzone (unter Einstellungen -> Allgemeinin Admin) alsbenannte Stadt anstelleeines GMT-Nummernversatzes auswählen. Ich habe diesnichtgetestet,aberesist sehr wahrscheinlich,dass
get_option ('gmt_offset')
festgelegtist,wennget_option ('timezone_string')
nicht.date_default_timezone_set (get_option ('timezone_string'));
Der Nachteil dabeiist,dass WordPress davon ausgeht,dass PHPbeim Erstellen von MySQL-Zeitstempeln auf UTCeingestelltist,sodass Sie Ihre Datenbankbei jedem Zeitzonenwechselein wenig durcheinanderbringen können! Ganz zu schweigen von anderen WP-Plugins,diemöglicherweise davon ausgehen,dass sich die PHP-Umgebungimmerin UTCbefindet.
Wenn Sie alsonureine korrekte Zeit wünschen,können Sie Ihren Zeitstempelin UTCerzwingenmit:
get_post_time ('c',true);//solltefür Nicht-Post-Objektefunktionieren.
Obwohl dies korrektist,wird die Zeitzone leider auf UTCeingestellt.
Undbeachten Sie,dass Sienicht beide das Flag "true" und die Standardfunktiontimezone_set verwenden können.
Jede richtige Lösung wirdein Code-Snippet sein,das sowohl
gmt_offset
als auchtimezone_string
berücksichtigt undfüreinige eine Zeitzonefestlegt Eingang. WPgeht davon aus,dass PHPbeim Ausführen von MySQL-Zeitstempeln auf UTCgesetztist undmöglicherweise andere Pluginsbeschädigt.Eine solche Lösungfinden Sie unter https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ aber auch diesistein BUG,daher sollten Sie den
get_post_time ($ date_format,TRUE)
code,umeinen Zeitstempel zuerhalten,dertatsächlich korrektist. There are a few options, none of which really work great. This is a WordPress bug, and it genuinely sucks because the time is wrong unless you set your site to UTC... which is confusing and not always even possible.
This next code I think only works if you choose your Timezone (Under Settings -> General in admin) as a named city instead of by an GMT number offset. I haven't tested this but it's very possible that
get_option('gmt_offset')
is set whenget_option('timezone_string')
is not.date_default_timezone_set(get_option('timezone_string'));
The downside of this is that WordPress assumes PHP is set to UTC when making mysql timestamps, so you can mess up your database a little bit whenever you switch timezones! Not to mention other WP plugins may assume that the PHP environment is always in UTC.
So, if you just want a correct time -- you can force your timestamp to be in UTC with:
get_post_time('c', true); //should work for non-post objects.
Unfortunately, although correct, it'll make the timezone get set to UTC.
And note that you can't both use the "true" flag and the default timezone_set function.
Any proper solution is gonna be a code-snippet that accounts for both
gmt_offset
ANDtimezone_string
and uses them to set a timezone on some input. WP assumes that PHP set to UTC when doing mysql timestamps, and it might break other plugins.There's one such solution on https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ but, again this is a BUG, so you should use the
get_post_time($date_format, TRUE)
code to get a timestamp that is actually correct.
Kannmirjemand sagen,wieich dieim WordPress-Administratorfestgelegte Zeitzoneerhalte?
Wenn das Blogbeispielsweise auf Eastern Timeeingestelltist,benötigeichgenau diese Zeichenfolge zum Ausdrucken:
Diesistfüreine Funktion,diein functions.phpin meinem Thema lebt.