¿Cómo obtener la configuración de la zona horaria de WordPress?

44

¿Puede alguien decirme cómo obtener la zona horaria establecida en el Administrador de WordPress?

Por ejemplo, si el blog está configurado en Hora del Este, necesito esta cadena exacta para imprimir:

  

US / Eastern

Esto es para una función que vive en functions.php en mi tema.

    
pregunta user1462 02.02.2011 - 23:38

6 respuestas

73

si necesitas el gmt_offset entonces

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

esto te dará un número entero como 2 o -2 .

y si necesita el uso de la cadena de zona horaria

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

esto te dará una cadena como America/Indianapolis

    
respondido por el Bainternet 03.02.2011 - 00:42
9

Consulte la página de referencia de opciones . La opción gmt_offset devuelve un entero. Por ejemplo, si la zona horaria está configurada en Hora del Este (por ejemplo, América / Nueva_York), gmt_offset debería ser -5.

    
respondido por el Travis Northcutt 02.02.2011 - 23:44
6

La situación desafortunada es que existen dos opciones diferentes:

  1. Más reciente timezone_string , que guarda la zona horaria de estilo PHP.
  2. Mayores gmt_offset , que ahorra el desplazamiento numérico en horas.

Pero en los entornos más nuevos timezone_string en realidad reemplaza gmt_offset , el valor devuelto por este último se basará en el primero. Sin embargo, el opuesto no es verdadero: gmt_offset podría ser válido, mientras que timezone_string está vacío.

He dedicado bastante tiempo a estas cosas, y la versión más actual que implementé en mi WpDateTime library está siguiendo:

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

Esto intentará crear una instancia de un objeto de zona horaria significativo en todos los casos posibles, siempre que haya información disponible.

    
respondido por el Rarst 16.10.2017 - 16:33
2

No creas que vas a obtener una cadena como EE. UU. / Este sin almacenar todas las cadenas que deseas en una matriz y referirte a ellas. Usando PHP puede obtener la abreviatura de la zona horaria, es decir, EST ; y si tiene esos valores almacenados en una matriz con las cadenas que desea, puede buscarlos.

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

Para agregar a Bainternet (estoy agregando esto como respuesta porque no puedo comentar, tengo menos de 50 puntos en la pila de desarrollo de WP).

WordPress solo almacenará una cadena de zona horaria si selecciona una cadena de zona horaria en la configuración general. La selección de UTF es donde se configura por defecto en la lista, pero puede desplazarse hasta las cadenas de la zona horaria. Si configura una cadena de zona horaria, se establecerán tanto la cadena UTF como la cadena de zona horaria. Serán iguales (lo que significa que el UTF se restablece a la nueva zona cuando selecciona una zona horaria de cadena de zona horaria).

(WordPress 4)

    
respondido por el Jeff 11.12.2014 - 07:11
0

Hay algunas opciones, ninguna de las cuales funciona realmente bien. Este es un error de WordPress, y realmente apesta porque el tiempo es incorrecto a menos que configure su sitio en UTC ... lo que es confuso y no siempre es posible.

Este siguiente código creo que solo funciona si elige su Zona horaria (en Configuración - > General en admin) como una ciudad con nombre en lugar de por un desplazamiento de número GMT. No he probado esto, pero es muy posible que get_option('gmt_offset') se establezca cuando get_option('timezone_string') no lo esté.

date_default_timezone_set(get_option('timezone_string'));

La desventaja de esto es que WordPress asume que PHP está configurado a UTC al crear marcas de tiempo de mysql, ¡así que puedes desordenar un poco tu base de datos cada vez que cambies las zonas horarias! Sin mencionar otros complementos de WP, se puede suponer que el entorno PHP siempre está en UTC.

Entonces, si solo quiere una hora correcta, puede forzar que su marca de tiempo esté en UTC con:

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

Desafortunadamente, aunque es correcto, hará que la zona horaria se establezca en UTC.

Y tenga en cuenta que no puede ambos usar el indicador "verdadero" y la función predeterminada de zona horaria.

Cualquier solución adecuada será un fragmento de código que representa tanto gmt_offset AND timezone_string y los usa para establecer una zona horaria en alguna entrada. WP asume que PHP está configurado en UTC al realizar las marcas de tiempo de mysql, y podría romper otros complementos.

Hay una solución de este tipo en enlace pero, nuevamente, esto es un ERROR, por lo que debería usar el código get_post_time($date_format, TRUE) para obtener una marca de tiempo que sea realmente correcta.

    
respondido por el Ryan Taylor 06.11.2015 - 01:35

Lea otras preguntas en las etiquetas