Comment obtenir le réglage du fuseau horaire WordPress?

44

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 de l'Est, j'ai besoin de cette chaîne exacte pour imprimer:

  

États-Unis / Est

Ceci est pour une fonction qui vit dans functions.php dans mon thème.

    
posée user1462 02.02.2011 - 23:38
la source

6 réponses

73

si vous avez besoin de gmt_offset alors

<?php echo get_option('gmt_offset'); ?>

cela vous donnera un entier comme 2 ou -2 .

et si vous avez besoin de la chaîne de fuseau horaire, utilisez

<?php echo get_option('timezone_string'); ?>

cela vous donnera une chaîne comme America / Indianapolis

    
réponse donnée Bainternet 03.02.2011 - 00:42
la source
9

Consultez la page de référence sur les 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 doit être égal à -5.

    
réponse donnée Travis Northcutt 02.02.2011 - 23:44
la source
6

Malheureusement, il existe deux options différentes:

  1. Le plus récent timezone_string , qui enregistre le fuseau horaire de style PHP.
  2. Older gmt_offset , qui enregistre le décalage numérique en heures.

Mais dans les environnements plus récents, timezone_string remplace gmt_offset , la valeur renvoyée par ce dernier sera basée sur le premier. Cependant, l'opposé n'est pas vrai - gmt_offset peut être valide, alors que timezone_string est vide.

J'ai passé pas mal de temps sur ces sujets et la prise la plus récente que j'ai mise en œuvre dans ma WpDateTime bibliothèque est la suivante:

class WpDateTimeZone extends \DateTimeZone {

    /**
     * Determine time zone from WordPress options and return as object.
     *
     * @return self
     */
    public static function getWpTimezone() {

        $timezone_string = get_option( 'timezone_string' );

        if ( ! empty( $timezone_string ) ) {
            return new self( $timezone_string );
        }

        $offset  = get_option( 'gmt_offset' );
        $hours   = (int) $offset;
        $minutes = ( $offset - floor( $offset ) ) * 60;
        $offset  = sprintf( '%+03d:%02d', $hours, $minutes );

        return new self( $offset );
    }
}

Ceci tentera d'instancier un objet de fuseau horaire significatif dans tous les cas possibles, à condition que toute information soit disponible.

    
réponse donnée Rarst 16.10.2017 - 16:33
la source
2

Ne pensez pas que vous obtiendrez une chaîne telle que États-Unis / Est 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 souhaitées, vous pouvez 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.
 ?>
    
réponse donnée goldenapples 03.02.2011 - 06:42
la source
1

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 (c’est-à-dire que le fichier UTF est réinitialisé dans la nouvelle zone lorsque vous sélectionnez une chaîne de fuseau horaire).

(WordPress 4)

    
réponse donnée Jeff 11.12.2014 - 07:11
la source
0

Il existe plusieurs options, dont aucune ne fonctionne vraiment bien. C’est un bug de WordPress, et ça craint vraiment parce que le temps est mauvais à moins que vous ne configuriez votre site en UTC ... ce qui est déroutant et pas toujours possible.

Je pense que le code suivant ne fonctionne que si vous choisissez votre fuseau horaire (sous Paramètres -> Général dans admin) en tant que ville nommée au lieu d'un décalage de numéro GMT. Je n'ai pas testé cela, mais il est fort possible que get_option('gmt_offset') soit défini alors que get_option('timezone_string') ne l'est pas.

date_default_timezone_set(get_option('timezone_string'));

L’inconvénient, c’est que WordPress suppose que PHP est réglé sur UTC lors de la création des horodatages mysql. Vous pouvez donc modifier un peu votre base de données à chaque changement 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 au format UTC avec:

get_post_time('c', true); //should work for non-post objects.

Malheureusement, même s’il est correct, le fuseau horaire sera réglé sur UTC.

Notez que vous ne pouvez pas les deux utiliser les indicateurs "true" et la fonction timezone_set par défaut.

Toute solution appropriée sera un extrait de code qui prend en compte gmt_offset ET timezone_string et les utilise pour définir un fuseau horaire pour une entrée. WP suppose que PHP est défini sur UTC lors de l’utilisation des horodatages mysql et que cela pourrait endommager d’autres plugins.

Il existe une solution de ce type sur enlace , mais là encore est un BUG, vous devez donc utiliser le code get_post_time($date_format, TRUE) pour obtenir un horodatage correct.

    
réponse donnée Ryan Taylor 06.11.2015 - 01:35
la source

Lire d'autres questions sur les étiquettes