Como obter a configuração do fuso horário do WordPress?

44

Alguém pode me dizer como obter o fuso horário definido no Admin do WordPress?

Por exemplo, se o blog estiver definido para o horário do leste, preciso que essa sequência exata seja impressa:

  

EUA / Leste

Isto é para uma função que vive em functions.php no meu tema.

    
por user1462 02.02.2011 / 23:38
fonte

6 respostas

73

se você precisar do gmt_offset então

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

isto lhe dará um número inteiro como 2 ou -2 .

e se você precisar da string de fuso horário use

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

isso vai te dar uma string como America / Indianapolis

    
por Bainternet 03.02.2011 / 00:42
fonte
9

Verifique a página de referência das opções . A opção gmt_offset retorna um inteiro. Por exemplo, se o fuso horário estiver definido como horário do leste (por exemplo, América / New_York), gmt_offset deverá ser -5.

    
por Travis Northcutt 02.02.2011 / 23:44
fonte
6

A infeliz situação é que existem duas opções diferentes:

  1. Mais recente em timezone_string , o que economiza o fuso horário em estilo PHP.
  2. Mais antigo gmt_offset , que salva o deslocamento numérico de flutuação em horas.

Mas em ambientes mais recentes, timezone_string substitui gmt_offset , o valor retornado por este último será baseado no primeiro. No entanto, o oposto não é verdadeiro - gmt_offset pode ser válido, enquanto timezone_string está vazio.

Passei um pouco de tempo nessas coisas e a mais atual implementada na minha WpDateTime library está seguindo:

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

Isso tentará instanciar um objeto de fuso horário significativo em todos os casos possíveis, contanto que qualquer informação esteja disponível.

    
por Rarst 16.10.2017 / 16:33
fonte
2

Não pense que você obterá uma string como US / Eastern sem armazenar todas as strings desejadas em uma matriz e referindo-se a elas. Usando PHP você pode obter a abreviação do fuso horário, ou seja, EST ; e se você tiver esses valores armazenados em uma matriz com as seqüências desejadas, poderá consultá-los.

<?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.
 ?>
    
por goldenapples 03.02.2011 / 06:42
fonte
1

Para adicionar à Bainternet (estou adicionando isso como uma resposta porque não posso comentar - tenho menos de 50 pontos na pilha de desenvolvimento do WP).

O WordPress só armazenará uma string de fuso horário se você selecionar uma string de fuso horário nas configurações gerais. A seleção de UTF é onde ela é padronizada na lista, mas você pode rolar até as cadeias de fuso horário. Se você definir uma string de fuso horário, a string UTF e a fuso horário serão configuradas. Eles serão os mesmos (o que significa que o UTF é redefinido para a nova zona quando você seleciona um fuso horário de string de fuso horário).

(WordPress 4)

    
por Jeff 11.12.2014 / 07:11
fonte
0

Existem algumas opções, nenhuma das quais realmente funciona muito bem. Este é um bug do WordPress, e é realmente uma droga, porque o tempo está errado, a menos que você configure seu site para o UTC ... o que é confuso e nem sempre é possível.

Este próximo código só funciona se você escolher o fuso horário (em Configurações - > Geral na administração) como uma cidade nomeada em vez de um deslocamento de número GMT. Eu não testei isso, mas é muito possível que get_option('gmt_offset') seja definido quando get_option('timezone_string') não é.

date_default_timezone_set(get_option('timezone_string'));

A desvantagem disso é que o WordPress assume que o PHP está configurado para UTC ao fazer timestamps mysql, então você pode atrapalhar um pouco seu banco de dados sempre que mudar de fuso horário! Sem mencionar que outros plugins do WP podem assumir que o ambiente PHP está sempre em UTC.

Então, se você quer apenas um horário correto, você pode forçar seu timestamp a estar no UTC com:

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

Infelizmente, embora esteja correto, o fuso horário será definido como UTC.

E note que você não pode ambos usar o sinalizador "true" e a função padrão timezone_set.

Qualquer solução correta será um snippet de código que representa gmt_offset AND timezone_string e as usa para definir um fuso horário em alguma entrada. O WP assume que o PHP está configurado para UTC ao fazer registros de tempo do mysql, e pode quebrar outros plugins.

Existe uma dessas soluções em enlace mas, novamente é um BUG, portanto, você deve usar o código get_post_time($date_format, TRUE) para obter um registro de data e hora que esteja correto.

    
por Ryan Taylor 06.11.2015 / 01:35
fonte