Как получить настройку часового пояса WordPress?

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

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

  

US /Eastern

Это для функции, которая живет в functions.php в моей теме.

42 голоса | спросил user1462 3 FebruaryEurope/MoscowbThu, 03 Feb 2011 01:38:06 +0300000000amThu, 03 Feb 2011 01:38:06 +030011 2011, 01:38:06

6 ответов


72

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

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

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

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

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

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

ответил Bainternet 3 FebruaryEurope/MoscowbThu, 03 Feb 2011 02:42:35 +0300000000amThu, 03 Feb 2011 02:42:35 +030011 2011, 02:42:35
9

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

ответил Travis Northcutt 3 FebruaryEurope/MoscowbThu, 03 Feb 2011 01:44:06 +0300000000amThu, 03 Feb 2011 01:44:06 +030011 2011, 01:44:06
3

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

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

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

ответил Rarst 16 +03002017-10-16T17:33:17+03:00312017bEurope/MoscowMon, 16 Oct 2017 17:33:17 +0300 2017, 17:33:17
2

Не думайте, что вы получите строку типа US /Eastern , не сохраняя все строки, которые вы хотите в массиве, и ссылаетесь на них. С помощью PHP вы можете получить сокращенное время, т. Е. EST ; и если у вас есть эти значения, хранящиеся в массиве со строками, которые вы хотите, вы можете просмотреть их.

<?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.
 ?>
ответил goldenapples 3 FebruaryEurope/MoscowbThu, 03 Feb 2011 08:42:20 +0300000000amThu, 03 Feb 2011 08:42:20 +030011 2011, 08:42:20
1

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

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

(WordPress 4)

ответил Jeff 11 ThuEurope/Moscow2014-12-11T09:11:00+03:00Europe/Moscow12bEurope/MoscowThu, 11 Dec 2014 09:11:00 +0300 2014, 09:11:00
0

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

Этот следующий код, на мой взгляд, работает только в том случае, если вы выбрали часовой пояс (в разделе «Настройки -> General in admin») в качестве имени города, а не смещением по 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.

Обратите внимание, что вы не можете и использовать флаг «true» и по умолчанию timezone_set.

Любое правильное решение будет фрагментом кода, который учитывает как gmt_offset И timezone_string, так и использует их для установки часового пояса на некоторых вход. WP предполагает, что PHP настроен на UTC при выполнении timestamps mysql, и он может сломать другие плагины.

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

ответил Ryan Taylor 6 52015vEurope/Moscow11bEurope/MoscowFri, 06 Nov 2015 03:35:13 +0300 2015, 03:35:13

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132