Comment obtenir le paramètre de fuseau horaire de WordPress?
7 réponses
- votes
-
- 2011-02-02
si vous avezbesoin dugmt_offset alors
<?php echo get_option('gmt_offset'); ?>
cela vous donnera unentier comme 2 ou -2 .
et si vous avezbesoin de la chaîne defuseau horaire,utilisez
<?php echo get_option('timezone_string'); ?>
cela vous donnera une chaîne comme 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
-
Montimezone_stringest dans labase de donnéesmaisilest vide,même après avoir sélectionné unfuseau horaire différent sur lapage desparamètres.Quelpourrait être le cas?(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
-
Gmt_offestprend-ilen compte l'heure d'étéen fonction duparamètre defuseau horaire du site?Does gmt_offest take daylight savings into account based on the site's timezone setting?
- 0
- 2013-12-19
- squarecandy
-
@ user2019515 Si vous choisissez une ville commefuseau horaire,elle seraenregistrée dans l'option "timezone_string",mais si vous choisissez un décalagemanuel (UTC + 1parexemple),elleestenregistrée dans l'option "gmt_offset" (comme "1")et timezone_stringreste vide.@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
La situationmalheureuseest qu'ilexisteen effet deux options différentes:
- Plus récent
timezone_string
,quienregistre lefuseau horaire de style PHP. -
gmt_offset
plus ancien,quienregistre le décalage duflottantnumériqueen heures.
Mais dans lesenvironnementsplus récents,
timezone_string
remplacegmt_offset
,la valeur renvoyéepar ce dernier serabasée sur lapremière. Cependant, l'opposé n'estpas vrai -gmt_offset
peut être valide,tandis quetimezone_string
est vide.WordPress 5.3 avait livré lafonction
wp_timezone()
,qui résume ceciet renvoie un objetDateTimeZone
valide,quels que soient lesparamètres WP sous-jacents.Auparavant,j'en avais une versionimplémentée dansma
WpDateTime
bibliothèque (pour les anecdotes qui ont servi debase à l'implémentationprincipale):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 ); } }
-
Cela devrait être la réponse acceptée.Lesgens rencontreront desbogues s'ils s'appuient uniquement surget_option ('timezone_string').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
-
C'est labonne réponse.This is the correct answer.
- 0
- 2018-12-09
- Lucas Bustamante
-
L'utilisation de `(int)`pour $ heureset de `floor`pour $minutesn'est-ellepasproblématique?Selon la documentation,`(int)`et `floor` sontpresque lesmêmes sauf que` (int) `arrondira -4,5 à -4et`floor` l'arrondira à -5.Cela semble donner des décalages defuseau horairenégatifsincorrects?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 ouais,cela a été corrigé dans labibliothèqueil y a longtemps,juste une copiepérimée du code dans la réponseici.@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
-
Ohmon dieupourquoi l'ont-ilsmisen œuvre comme ça ... Celam'a coûté une heure complète *tilt *Oh my god why did they implement it like this .... It costed me a full hour *tilt*
- 0
- 2019-06-21
- Blackbam
-
Labibliothèquegère-t-elle lefait qu'unfuseau horairepeut contenirplusieurs décalages?Voir: 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 laisse cela à PHP,quiinclutet utilise labase de données olson.@DarkNeuron lib just leaves that to PHP, which includes and uses olson database.
- 0
- 2019-11-29
- Rarst
-
- 2011-02-02
Consultez la page de référence des options .L'option
gmt_offset
renvoie unentier.Parexemple,si lefuseau horaireest défini sur l'heure de l'Est (parexemple,Amérique/New_York),gmt_offset
doit être -5.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
Nepensezpas que vous obtiendrez une chaîne comme US/Eastern sans stockertoutes les chaînes souhaitées dans untableauet yfaire référence.En utilisant PHP,vouspouvez obtenir l'abréviation dufuseau horaire,c'est-à-dire EST ;et si vous avez ces valeurs stockées dans untableau avec les chaînes que vous voulez,vouspouvez les rechercher.
<?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. ?>
-
Celan'estpasnécessaire.Les [standards defuseau horaire] (http://php.net/manual/en/timezones.php)fontpartie de PHP depuis la version 5.2,tout comme l '[objet DateTimeZone] (http://php.net/manual/en/datetimezone.getname.php)et lesfonctions standard associées.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
Étant donné que wordpress conserve la chaîne defuseau horaire dans letableau des options,vouspouvez utiliser laméthode orientée objetpour obtenir lebonmoment sur votre site wordpress:
$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
À ajouter à Bainternet (j'ajoute ceci comme réponse carje nepeuxpas commenter -j'aimoins de 50points sur lapile de développement WP).
WordPressne stockera une chaîne defuseau horaire que si vous sélectionnez une chaîne defuseau horaire dans lesparamètresgénéraux.La sélection UTFest l'endroitpar défaut dans la liste,mais vouspouvezfaire défiler les chaînes defuseau horaire.Si vous définissez une chaîne defuseau horaire,l'UTFet la chaîne defuseau horaire seront définies.Ils seront lesmêmes (ce qui signifie que l'UTFest réinitialisé à lanouvelle zone lorsque vous sélectionnez unfuseau horaire de chaîne defuseau horaire).
(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
Ilexiste quelques options,dont aucunene fonctionne vraimentbien. C'est unbug WordPress,et ça craint vraimentparce que l'heuren'estpas correcte àmoins que vousne définissiez votre site sur UTC ... ce quiest déroutantet pastoujourspossible.
Ce code suivant,je pense,ne fonctionne que si vous choisissez votrefuseau horaire (sous Paramètres -> Général dans l'administrateur) comme villenommée au lieu d'un décalage denuméro GMT. Jen'aipastesté celamaisilesttrèspossible que
get_option('gmt_offset')
soit défini lorsqueget_option('timezone_string')
ne l'estpas.date_default_timezone_set(get_option('timezone_string'));
L'inconvénientest que WordPress suppose que PHPest réglé sur UTC lors de la création des horodatagesmysql,vouspouvez doncgâcher unpeu votrebase de données chaquefois que vous changez defuseau horaire! Sans oublier que d'autresplugins WPpeuvent supposer que l'environnement PHPesttoujoursen UTC.
Donc,si vous voulezjuste une heure correcte,vouspouvezforcer votre horodatage à êtreen UTC avec:
get_post_time('c', true); //should work for non-post objects.
Malheureusement,bien que correct,lefuseau horaire sera réglé sur UTC.
Etnotez que vousne pouvezpas à lafois utiliser le drapeau "vrai" et lafonctionpar défauttimezone_set.
Toute solution appropriée sera unextrait de code quiprenden compte à lafois
gmt_offset
ETtimezone_string
et les utilisepour définir unfuseau horaire sur certains contribution. WP suppose que PHPest défini sur UTC lors de la création d'horodatagesmysql,et celapourrait casser d'autresplugins.Ilexiste unetelle solution sur https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/mais,encore unefois,c'est un BUG,vous devriez donc utiliser le
get_post_time($date_format, TRUE)
codepour obtenir un horodatage quiest réellement correct.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.
Quelqu'unpeut-ilme dire comment obtenir lefuseau horaire défini dans l'administrateur WordPress?
Parexemple,si leblogest défini sur l'heure de l'Est,j'aibesoin de cette chaîneexactepour l'imprimer:
Ceciestpour unefonction qui vit dansfunctions.php dansmonthème.