Quelqu'un peut-il me dire comment obtenir le fuseau horaire défini dans l'administrateur WordPress?
Par exemple, si le blog est défini sur l'heure normale de l'Est, j'ai besoin de cette chaîne exacte pour imprimer:
US / Est
Ceci est pour une fonction qui vit dans functions.php dans mon thème.
Malheureusement, il existe deux options différentes:
timezone_string
, ce qui enregistre le fuseau horaire de style PHP.gmt_offset
, ce qui enregistre le décalage numérique en heures.Mais dans les environnements les plus récents en
timezone_string
réalité l' emportegmt_offset
, la valeur renvoyée par celle - ci sera basée sur l'ancien. Cependant, le contraire n'est pas vrai -gmt_offset
peut être valable, alors quetimezone_string
est vide.J'ai passé pas mal de temps sur ces sujets, et la prise la plus récente que j'ai implémentée dans ma
WpDateTime
bibliothèque est la suivante:Cela tentera d'instancier un objet de fuseau horaire significatif dans tous les cas possibles, à condition que toute information soit disponible.
la source
(int)
pour $ heures etfloor
de $ minutes ne pose-t-elle pas problème? Selon la documentation,(int)
etfloor
sont presque les mêmes , sauf(int)
arrondit -4,5 à -4 etfloor
va arrondir à -5. Cela semble donner des décalages de fuseau horaire négatifs incorrects?Consultez la page de référence des options . L'option
gmt_offset
renvoie un entier. Par exemple, si le fuseau horaire est défini sur l'heure normale de l'Est (par exemple, America / New_York),gmt_offset
la valeur -5.la source
Ne pensez pas que vous obtiendrez une chaîne comme US / Eastern sans stocker toutes les chaînes souhaitées dans un tableau et y faire référence. En utilisant PHP, vous pouvez obtenir l’abréviation du fuseau horaire, c’est-à-dire EST ; et si vous avez ces valeurs stockées dans un tableau avec les chaînes que vous voulez, vous pouvez les rechercher.
la source
Pour ajouter à Bainternet (j'ajoute ceci comme réponse car je ne peux pas commenter - j'ai moins de 50 points sur la pile de développement WP).
WordPress ne stockera une chaîne de fuseau horaire que si vous sélectionnez une chaîne de fuseau horaire dans les paramètres généraux. La sélection UTF correspond à sa valeur par défaut dans la liste, mais vous pouvez faire défiler les chaînes jusqu'au fuseau horaire. Si vous définissez une chaîne de fuseau horaire, les chaînes UTF et Timezone seront définies. Ils seront identiques (en d'autres termes, l'UTF est réinitialisé dans la nouvelle zone lorsque vous sélectionnez une chaîne de fuseau horaire timezone).
(WordPress 4)
la source
Il existe quelques options, dont aucune ne fonctionne vraiment bien. C'est un bug de WordPress, et ça craint vraiment parce que l'heure est fausse, sauf si vous définissez votre site sur UTC ... ce qui est déroutant et même pas toujours possible.
Je pense que ce code suivant ne fonctionne que si vous choisissez votre fuseau horaire (sous Paramètres -> Général dans admin) comme ville nommée plutôt que par un décalage de numéro GMT. Je n'ai pas testé cela, mais il est très possible que ce
get_option('gmt_offset')
soit réglé quand ceget_option('timezone_string')
n'est pas le cas.L'inconvénient est que WordPress suppose que PHP est défini sur UTC lors de la création des horodatages mysql. Vous pouvez donc modifier un peu votre base de données lorsque vous changez de fuseau horaire! Sans parler des autres plugins WP, on peut supposer que l'environnement PHP est toujours en UTC.
Donc, si vous voulez juste une heure correcte - vous pouvez forcer votre horodatage à être en UTC avec:
Malheureusement, bien que correct, le fuseau horaire sera réglé sur UTC.
Et notez que vous ne pouvez pas utiliser à la fois le drapeau "true" et la fonction timezone_set par défaut.
Toute solution appropriée va consister en un extrait de code qui prend en compte à la fois
gmt_offset
ANDtimezone_string
et les utilise pour définir un fuseau horaire sur une entrée. WP suppose que PHP est défini sur UTC lors de l'exécution des horodatages mysql, et cela pourrait endommager d'autres plugins.Une solution de ce type est disponible sur https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ mais, là encore, il s'agit d'un bogue, vous devez donc utiliser le
get_post_time($date_format, TRUE)
code pour obtenir un horodatage qui est en fait correct.la source
Etant donné que wordpress conserve la chaîne du fuseau horaire dans la table des options, vous pouvez utiliser la méthode orientée objet pour obtenir le bon moment sur votre site wordpress:
la source