Вопрос

Может кто-нибудь сказать мне, как получить часовой пояс, установленный в администраторе WordPress?

Например, если в блоге установлено восточное время, мне нужна именно эта строка для печати:

США/Восточная Европа

Это функция, которая находится в файле function.php моей темы.

Это было полезно?

Решение

если вам нужен gmt_offset, тогда

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

это даст вам целое число вроде 2 или -2.

и если вам нужна строка часового пояса, используйте

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

это даст вам строку типа Америка/Индианаполис

Другие советы

К сожалению, ситуация в том, что действительно есть два разных варианта:

  1. Новее timezone_string, который экономит часовой пояс в стиле PHP.
  2. Старший gmt_offset, что экономит числовое смещение плавания в часы.

Но в более новых условиях timezone_string фактически переопределение gmt_offset, Значение, возвращаемое последним, будет основано на первом. Тем не менее противоположный не правда - gmt_offset может быть действительным, пока timezone_string пустой.

Я провожу довольно много времени на эти вещи, и самый текущий дубль, который я реализовал в своем WpDateTime библиотека является следующее:

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

Это попытается создать осмысленный объект часового пояса во всех возможных случаях, если любая информация вообще доступна.

Проверить Справочная страница опции. Анкет Опция gmt_offset Возвращает целое число. Например, если часовой пояс установлен на восточное время (например, America/new_york), gmt_offset должно быть -5.

Не думайте, что вы получите строку вроде США/Восточная Европа без сохранения всех нужных строк в массиве и обращения к ним.Используя PHP, вы можете получить аббревиатуру часового пояса, т.е. стандартное восточное время;и если у вас есть эти значения, хранящиеся в массиве с нужными строками, вы можете их найти.

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

Чтобы добавить в Bainternet (я добавляю это в качестве ответа, потому что я не могу комментировать - у меня менее 50 баллов в стеке разработки WP).

WordPress будет хранить строку часового пояса, только если вы выберете строку часового пояса в общих настройках. Выбор UTF - это место, где он по умолчанию в списке, но вы можете прокрутить путь к строкам часового пояса. Если вы установите строку часового пояса, будут установлены как UTF, так и строка времени. Они будут такими же (то есть UTF получает сброс в новую зону, когда вы выбираете часовой часовой часовой часовой застройки).

(WordPress 4)

Есть несколько вариантов, ни один из которых действительно не работает отлично. Это ошибка WordPress, и она действительно отстой, потому что время неверно, если вы не установите свой сайт на UTC ... что сбивает с толку и не всегда возможно.

Этот следующий код, который я думаю, работает только в том случае, если вы выберете свой часовой застрой (в разделе «В условиях -> генерал в администраторе») в качестве названного города, а не смещением номера GMT. Я не проверял это, но вполне возможно, что get_option('gmt_offset') установлен, когда get_option('timezone_string') не является.

date_default_timezone_set(get_option('timezone_string'));

Недостатком этого является то, что WordPress предполагает, что PHP устанавливается на UTC при создании временных метров MySQL, так что вы можете немного испортить свою базу данных, когда переключаете часовые пояса! Не говоря уже о других плагинах WP, могут предположить, что среда PHP всегда находится в UTC.

Итак, если вы просто хотите правильное время - вы можете заставить свою временную метку быть в UTC:

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

К сожалению, хотя и правильно, это заставит часовой пост установлен в UTC.

И обратите внимание, что вы не можете оба Используйте флаг «истинного» а также функция TimeZone_SONE по умолчанию.

Любой правильный Решение-это кодовая снепт, которая учитывает обоих gmt_offset А ТАКЖЕ timezone_string и использует их для установки часового пояса на некотором входе. WP предполагает, что PHP устанавливает UTC при выполнении временных метров MySQL, и это может сломать другие плагины.

Есть одно такое решение на https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ Но, опять же, это ошибка, поэтому вы должны использовать get_post_time($date_format, TRUE) Код, чтобы получить метку времени, которая на самом деле верна.

Учитывая тот факт, что WordPress сохраняет строку часового пояса в таблице параметров, вы можете использовать объектно -ориентированный способ получить правильное время на своем сайте 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>";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top