it-swarm.com.de

Wie bekomme ich die Zeitzoneneinstellung von WordPress?

Kann mir jemand sagen, wie ich die im WordPress-Admin eingestellte Zeitzone finde?

Wenn das Blog beispielsweise auf Eastern Time eingestellt ist, benötige ich genau diese Zeichenfolge zum Ausdrucken:

US/Eastern

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

46
user1462

wenn du den gmt_offset dann brauchst

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

dies gibt Ihnen eine ganze Zahl wie 2 oder -2 .

und wenn Sie die Zeitzonenzeichenfolge benötigen, verwenden Sie

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

dies gibt Ihnen eine Zeichenfolge wie Amerika/Indianapolis

75
Bainternet

Die unglückliche Situation ist, dass es in der Tat zwei verschiedene Möglichkeiten gibt:

  1. Neuerer timezone_string, der die Zeitzone von PHP speichert.
  2. Älterer gmt_offset, der den numerischen Gleitkomma-Versatz in Stunden speichert.

In neueren Umgebungen basiert timezone_string tatsächlich überschreibt gmt_offset auf dem Wert, der von letzterem zurückgegeben wird. Das Gegenteil ist jedoch nicht wahr - gmt_offset ist möglicherweise gültig, während timezone_string leer ist.

Ich habe ziemlich viel Zeit mit diesen Dingen verbracht und die aktuellste Einstellung, die ich in meiner WpDateTime library implementiert habe, ist folgende:

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

Auf diese Weise wird in allen möglichen Fällen versucht, ein aussagekräftiges Zeitzonenobjekt zu instanziieren, sofern überhaupt Informationen verfügbar sind.

12
Rarst

Überprüfen Sie die Option Referenzseite . Die Option gmt_offset gibt eine Ganzzahl zurück. Wenn die Zeitzone beispielsweise auf Eastern Time eingestellt ist (z. B. America/New_York), sollte gmt_offset -5 sein.

9

Denken Sie nicht, dass Sie eine Zeichenfolge wie US/Eastern erhalten, ohne alle gewünschten Zeichenfolgen in einem Array zu speichern und auf sie zu verweisen. Mit PHP können Sie die Abkürzung für die Zeitzone erhalten, dhEST; Wenn Sie diese Werte in einem Array mit den gewünschten Zeichenfolgen 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.
 ?>
2
goldenapples

Zum Bainternet hinzufügen (ich füge dies als Antwort hinzu, weil ich keine Kommentare abgeben kann - ich habe weniger als 50 Punkte auf dem WP Development Stack).

WordPress speichert eine Zeitzonenzeichenfolge nur, wenn Sie in den allgemeinen Einstellungen eine Zeitzonenzeichenfolge auswählen. Bei der UTF-Auswahl wird die Standardeinstellung in der Liste verwendet, Sie können jedoch einen Bildlauf bis zu Zeitzonenzeichenfolgen durchführen. Wenn Sie eine Zeitzonenzeichenfolge festlegen, werden sowohl die UTF- als auch die Zeitzonenzeichenfolge festgelegt. Sie sind identisch (dh, die UTF wird auf die neue Zone zurückgesetzt, wenn Sie eine Zeitzonenzeichenfolge auswählen).

(WordPress 4)

1
Jeff

Es gibt einige Optionen, von denen keine wirklich gut funktioniert. Dies ist ein WordPress-Fehler, und es ist wirklich zum Kotzen, weil die Zeit falsch ist, es sei denn, Sie setzen Ihre Site auf UTC ... was verwirrend und nicht immer möglich ist.

Dieser nächste Code funktioniert meines Erachtens nur, wenn Sie Ihre Zeitzone (unter Einstellungen -> Allgemein in Admin) als benannte Stadt anstelle eines GMT-Nummernversatzes auswählen. Ich habe dies nicht getestet, aber es ist sehr wahrscheinlich, dass get_option('gmt_offset') gesetzt ist, wenn get_option('timezone_string') nicht gesetzt ist.

date_default_timezone_set(get_option('timezone_string'));

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

Wenn Sie also nur eine korrekte Uhrzeit wünschen, können Sie Ihren Zeitstempel in UTC mit den folgenden Werten festlegen:

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

Leider wird die Zeitzone dadurch auf UTC gesetzt, obwohl dies korrekt ist.

Und beachten Sie, dass Sie nicht beide das Flag "true" und die Standardfunktion timezone_set verwenden können.

Jede richtige Lösung ist ein Code-Snippet, das sowohl gmt_offset als auch timezone_string berücksichtigt und verwendet, um eine Zeitzone für eine Eingabe festzulegen. WP geht davon aus, dass PHP bei der Ausführung von MySQL-Zeitstempeln auf UTC gesetzt ist und andere Plugins möglicherweise beschädigt werden.

Es gibt eine solche Lösung unter https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ , aber auch dies ist ein BUG, ​​daher sollten Sie den Code get_post_time($date_format, TRUE) verwenden um einen Zeitstempel zu erhalten, der tatsächlich korrekt ist.

0
Ryan Taylor