Domanda

Qualcuno può dirmi come ottenere il fuso orario che si trova nel WordPress Admin?

Ad esempio, se il blog è impostato su ora della costa orientale, ho bisogno di questo stringa esatta di stampare:

US / Eastern

Questo è per una funzione che vive in functions.php nel mio tema.

È stato utile?

Soluzione

se avete bisogno della gmt_offset poi

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

questo vi darà un intero come 2 o -2 .

e se avete bisogno l'uso stringa di fuso orario

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

questo vi darà una stringa come America / Indianapolis

Altri suggerimenti

La situazione spiacevole è che ci sono infatti due diverse opzioni:

  1. timezone_string più recente, che consente di risparmiare il fuso orario in stile PHP.
  2. gmt_offset più vecchio, che salva compensare tra ore float numerico.

Ma in ambienti più recenti timezone_string realtà override gmt_offset, il valore restituito da quest'ultimo sarà basato sul precedente. Tuttavia il opposta non è vero -. gmt_offset potrebbe essere valida, mentre timezone_string è vuoto

Ho passato un po 'di tempo su queste cose, e l'adozione più recente ho implementato nel mio WpDateTime biblioteca è il seguente:

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

Questo tenterà di un'istanza di un oggetto fuso orario significativa in tutti i casi possibili, a condizione che tutte le informazioni a tutti è a disposizione.

opzione Pagina di riferimento . L'opzione gmt_offset restituisce un intero. Ad esempio, se il fuso orario è impostato su tempo orientale (ad esempio America / New_York), gmt_offset dovrebbe essere -5.

Non credo che ti capita una stringa come US / Eastern senza memorizzare tutte le stringhe che si desidera in un array e riferendosi a loro. Utilizzo di PHP è possibile ottenere l'abbreviazione fuso orario, vale a dire EST ; e se si dispone di quei valori memorizzati in un array con le stringhe che si desidera, è possibile guardare in alto.

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

Per aggiungere a Bainternet. (Sto aggiungendo questo come una risposta perché non posso commentare - ho meno di 50 punti sulla pila WP Sviluppo)

WordPress memorizzare solo una stringa fuso orario se si seleziona una stringa fuso orario nelle impostazioni generali. selezione UTF è dove il default nella lista, ma è possibile scorrere fino a stringhe di fuso orario. Se si imposta una stringa fuso orario, verranno impostati sia l'UTF e la stringa di fuso orario. Saranno gli stessi (significato, l'UTF ottiene reset per la nuova zona quando si seleziona un fuso orario stringa di fuso orario).

(WordPress 4)

Ci sono alcune opzioni, nessuna delle quali funzionano davvero grande. Questo è un bug di WordPress, e mi fa schifo davvero, perché il tempo è sbagliato se non si imposta il vostro sito per UTC ... che è fonte di confusione e non sempre nemmeno possibile.

Il prossimo codice Penso che funziona solo se si sceglie il fuso orario (sotto Impostazioni -> Generali in amministrazione) come una città di nome anziché con un numero di correttore GMT. Non ho ancora testato questo, ma è molto probabile che get_option('gmt_offset') viene impostato quando get_option('timezone_string') non lo è.

date_default_timezone_set(get_option('timezone_string'));

Il rovescio della medaglia è che WordPress si assume PHP è impostato su UTC quando si effettua timestamp mysql, in modo da poter rovinare il vostro database di un po 'ogni volta che si passa fusi orari! Per non parlare di altri plugin WP può presumere che l'ambiente PHP è sempre in UTC.

Quindi, se si desidera solo una volta corretta - è possibile forzare la vostra data e ora di essere in UTC con:

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

Purtroppo, anche se corretto, farà il set get fuso orario UTC.

E nota che non è possibile sia usare la "vera" bandiera e la funzione di default timezone_set.

Qualsiasi corretta soluzione è gonna essere un codice-frammento di che i conti sia per gmt_offset E timezone_string e li usa per impostare un fuso orario su alcuni input. WP presuppone che PHP impostato su UTC quando si fa timestamp mysql, e potrebbe rompersi altri plugin.

C'è una tale soluzione su https: // www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ ma, ancora una volta questo è un bug, così si dovrebbe utilizzare il codice get_post_time($date_format, TRUE) per ottenere un timestamp che è in realtà corretto.

Dato il fatto che wordpress mantiene la stringa fuso orario nella tabella delle opzioni, è possibile utilizzare il modo orientata agli oggetti di ottenere il momento giusto sul tuo sito 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>";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top