Question

Quelqu'un peut-il me dire comment obtenir le fuseau horaire qui est définie dans l'admin WordPress?

Par exemple, si le blog est mis à heure de l'Est, j'ai besoin de cette chaîne exacte pour imprimer:

US / Eastern

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

Était-ce utile?

La solution

si vous avez besoin gmt_offset puis

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

cela vous donnera un entier comme 2 ou -2 .

et si vous avez besoin de l'utilisation de la chaîne de fuseau horaire

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

cela vous donnera une chaîne comme Amérique / Indianapolis

Autres conseils

La situation regrettable est qu'il ya en effet deux options différentes:

  1. récent timezone_string, ce qui économise le fuseau horaire de style PHP.
  2. ancien gmt_offset, ce qui économise float offset numérique en heures.

Mais dans les environnements les plus récents timezone_string fait overrides gmt_offset, la valeur retournée par ce dernier sera basé sur l'ancien. Cependant, le opposé est pas vrai -. gmt_offset peut-être valable, alors que timezone_string est vide

J'ai passé un peu de temps sur ces choses, et le plus courant I prennent mis en œuvre dans mon WpDateTime bibliothèque suit:

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 );
    }
}

essayera d'instancier un objet de fuseau horaire significatif dans tous les cas possibles, tant que toute information tout est disponible.

Vérifiez la Option page Référence . Le gmt_offset option renvoie un entier. Par exemple, si le fuseau horaire est réglé à heure de l'Est (par exemple Amérique / New_York), gmt_offset doit être -5.

Ne pensez pas que vous allez obtenir une chaîne comme États-Unis / Est sans enregistrer toutes les chaînes que vous voulez dans un tableau et en se référant à eux. En utilisant PHP, vous pouvez obtenir l'abréviation de fuseau horaire, soit EST ; et si vous avez ces valeurs stockées dans un tableau avec les chaînes que vous voulez, vous pouvez les consulter.

<?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.
 ?>

Pour ajouter à Bainternet. (J'ajoute cela comme une réponse parce que je ne peux pas commenter - j'ai moins de 50 points sur WP pile développement)

WordPress ne stocker une chaîne de fuseau horaire si vous sélectionnez une chaîne de fuseau horaire dans les paramètres généraux. sélection UTF est où la valeur par défaut dans la liste, mais vous pouvez faire défiler chemin jusqu'à des chaînes de fuseau horaire. Si vous définissez une chaîne de fuseau horaire, à la fois l'UTF et la chaîne de Fuseau horaire sera réglée. Ils seront les mêmes (ce qui signifie, l'UTF obtient remis à la nouvelle zone lorsque vous sélectionnez un fuseau horaire de chaîne de fuseau horaire).

(WordPress 4)

Il y a quelques options, dont aucune vraiment un excellent travail. Ceci est un bug de WordPress, et il suce vraiment parce que le temps est mauvais, sauf si vous définissez votre site à UTC ... ce qui est source de confusion et même pas toujours possible.

Ce code suivant je pense ne fonctionne que si vous choisissez votre Timezone (Sous Paramètres -> Général en admin) comme une ville nommée au lieu d'un nombre GMT offset. Je n'ai pas testé, mais il est très possible que get_option('gmt_offset') est définie lorsque get_option('timezone_string') est pas.

date_default_timezone_set(get_option('timezone_string'));

L'inconvénient est que WordPress suppose que PHP est défini sur UTC lors de timestamp mysql, vous pouvez donc gâcher votre base de données un peu chaque fois que vous changez de fuseaux horaires! Sans oublier d'autres plugins WP peut supposer que l'environnement PHP est toujours en UTC.

Donc, si vous voulez juste un bon moment - vous pouvez forcer votre horodatage en UTC avec:

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

Malheureusement, bien que correct, ça va faire le fuseau horaire get UTC.

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

Tous une bonne solution est va être un extrait de code qui prend en compte à la fois gmt_offset ET timezone_string et utilise eux pour définir un fuseau horaire sur une entrée. WP suppose que PHP sur UTC lorsque vous faites timestamps mysql, et il pourrait casser d'autres plugins.

Il y a une telle solution sur https: // www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ mais, encore une fois c'est un BUG, ??vous devez donc utiliser le code get_post_time($date_format, TRUE) pour obtenir un horodatage qui est en fait correcte.

Compte tenu du fait que la chaîne conserve wordpress de fuseau horaire dans le tableau des options, vous pouvez utiliser l'objet manière orientée d'obtenir le bon moment 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>";
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top