Frage

Kann mir jemand sagen, wie ich die Zeitzone in den WordPress -Administrator erhält?

Wenn das Blog beispielsweise auf die Ostzeit eingestellt ist, muss ich diese genaue Zeichenfolge ausdrucken:

USA/Eastern

Dies ist für eine Funktion, die in meinem Thema in functions.php lebt.

War es hilfreich?

Lösung

Wenn Sie das GMT_OFFSET benötigen, dann dann

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

Dies gibt Ihnen eine Ganzzahl wie 2 oder -2.

Und wenn Sie die Timezone -Zeichenfolge benötigen

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

Dies gibt Ihnen eine Zeichenfolge wie Amerika/Indianapolis

Andere Tipps

Die unglückliche Situation ist, dass es tatsächlich zwei verschiedene Optionen gibt:

  1. Neuer timezone_string, was die Zeitzone im PHP -Stil spart.
  2. Älter gmt_offset, was numerischen Schwimmerversatz in Stunden spart.

Aber in neueren Umgebungen timezone_string eigentlich überschreiben gmt_offset, Der von letzteren zurückgegebene Wert basiert auf dem ersteren. Jedoch das Gegenteil Ist nicht wahr - gmt_offset Könnte während sein, während timezone_string ist leer.

Ich habe ziemlich viel Zeit mit diesen Dingen verbracht und die aktuellste Einnahme, die ich in meinem implementiert habe WpDateTime Bibliothek folgt:

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 wird versucht, in allen möglichen Fällen ein aussagekräftiges Zeitzonenobjekt zu instanziieren, solange überhaupt Informationen verfügbar sind.

Überprüf den Option Referenzseite. Die Option gmt_offset Gibt eine Ganzzahl zurück. Zum Beispiel, wenn die Zeitzone auf die Ostzeit eingestellt ist (z. B. America/new_york), gmt_offset sollte -5 sein.

Ich glaube nicht, dass du eine Schnur wie hast wie USA/Eastern Ohne alle gewünschten Saiten in einem Array zu speichern und sich auf sie zu beziehen. Mit PHP können Sie die Zeitzone -Abkürzung erhalten, dh Europäische Sommerzeit; Und wenn Sie diese Werte in einem Array mit den gewünschten Saiten gespeichert haben, können Sie sie nachschlagen.

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

Um Bainternet hinzuzufügen (ich füge dies als Antwort hinzu, weil ich nicht kommentieren kann - ich habe weniger als 50 Punkte auf dem WP -Entwicklungsstapel).

WordPress speichert nur eine Zeitzone -Zeichenfolge, wenn Sie in den allgemeinen Einstellungen eine Zeitzone -Zeichenfolge auswählen. In der UTF -Auswahl befindet sich die Liste in der Liste, aber Sie können sich zu Zeitzone -Zeichenfolgen scrollen. Wenn Sie eine TimeZone -Zeichenfolge festlegen, werden sowohl die UTF als auch die TimeZone -Zeichenfolge festgelegt. Sie werden gleich sein (dh die UTF wird auf die neue Zone zurückgesetzt, wenn Sie eine Zeitzone -String -Zeitzone auswählen).

(WordPress 4)

Es gibt einige Optionen, von denen keiner wirklich großartig funktioniert. Dies ist ein WordPress -Fehler, und er ist wirklich scheiße, weil die Zeit falsch ist, es sei denn, Sie setzen Ihre Website auf UTC ... was verwirrend und nicht immer einmal möglich ist.

Ich denke, dieser nächste Code funktioniert nur, wenn Sie Ihre Zeitzone (unter Einstellungen -> General in Admin) als benannte Stadt anstelle eines GMT -Nummer -Offsets auswählen. Ich habe das nicht getestet, aber es ist sehr möglich, dass ich sehr möglich ist get_option('gmt_offset') wird eingestellt, wann get_option('timezone_string') ist nicht.

date_default_timezone_set(get_option('timezone_string'));

Der Nachteil davon ist, dass WordPress annimmt, dass PHP bei der Erstellung von MySQL -Zeitstempeln auf UTC eingestellt ist, sodass Sie Ihre Datenbank ein wenig durcheinander bringen können, wenn Sie Zeitzonen wechseln! Ganz zu schweigen von anderen WP -Plugins kann davon ausgehen, dass sich die PHP -Umgebung immer in UTC befindet.

Wenn Sie also nur eine korrekte Zeit wünschen - Sie können Ihren Zeitstempel in UTC erzwingen, mit:

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

Obwohl es richtig ist, wird die Zeitzone, obwohl es richtig ist, auf UTC eingestellt.

Und beachten Sie, dass Sie nicht können beide Verwenden Sie die "wahre" Flagge und Die Standardfunktion TimeZone_Set.

Irgendein richtig Die Lösung wird ein Code-Snippet sein, das beide berücksichtigt gmt_offset UND timezone_string und verwendet sie, um eine Zeitzone für einige Eingaben festzulegen. WP geht davon aus, dass PHP bei MySQL -Zeitstempeln auf UTC eingestellt ist und andere Plugins brechen kann.

Es gibt eine solche Lösung auf https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-t-timezones/ Dies ist aber auch hier ein Fehler, also sollten Sie die verwenden get_post_time($date_format, TRUE) Code, um einen Zeitstempel zu erhalten, der tatsächlich korrekt ist.

Angesichts der Tatsache, dass WordPress die TimeZone -Zeichenfolge in der Options -Tabelle aufbewahrt, können Sie die objektorientierte Methode verwenden, um die richtige Zeit auf Ihrer WordPress -Site zu erhalten:

$tz = new DateTimeZone(get_option('timezone_string'));
$dt = new DateTime("now", $tz);

$page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top