Может кто-нибудь сказать мне, как получить часовой пояс, который установлен в админке WordPress?
Например, если блог настроен на восточное время, мне нужно распечатать эту точную строку:
US / Eastern
Это для функции, которая живет в functions.php в моей теме.
Неудачная ситуация заключается в том, что действительно есть два разных варианта:
timezone_string
, который сохраняет часовой пояс в стиле PHP.gmt_offset
, который сохраняет числовое смещение в часах.Но в более новых средах
timezone_string
фактически переопределяетgmt_offset
, значение, возвращаемое последним, будет основано на первом. Однако обратное неверно -gmt_offset
может быть допустимо, покаtimezone_string
пусто.Я потратил довольно много времени на эти вещи, и наиболее актуальный подход, который я реализовал в моей
WpDateTime
библиотеке , следующий:Это попытается создать значимый объект часового пояса во всех возможных случаях, если доступна какая-либо информация.
источник
(int)
течение $ часов иfloor
$ минут проблематичным? Согласно документации,(int)
иfloor
почти то же самое , за исключением(int)
будет круглый -4,5 до -4 иfloor
округляет его до -5. Похоже, это даст неправильные отрицательные смещения часового пояса?Проверьте страницу ссылок на опции . Опция
gmt_offset
возвращает целое число. Например, если часовой пояс установлен на восточное время (например, America / New_York),gmt_offset
должно быть -5.источник
Не думайте, что вы получите строку типа US / Eastern без сохранения всех строк, которые вы хотите, в массиве и ссылки на них. Используя PHP, вы можете получить сокращение часового пояса, т.е. EST ; и если у вас есть эти значения, хранящиеся в массиве со строками, которые вы хотите, вы можете посмотреть их.
источник
Чтобы добавить в Bainternet (я добавляю это как ответ, потому что я не могу комментировать - у меня меньше 50 очков в стеке разработки WP).
WordPress будет хранить строку часового пояса, только если вы выберете строку часового пояса в общих настройках. Выбор UTF - то, где это по умолчанию в списке, но вы можете прокрутить путь до строк часового пояса. Если вы установите строку часового пояса, то будут установлены как UTF, так и строка часового пояса. Они будут одинаковыми (то есть UTF будет сброшен в новую зону при выборе строки часового пояса timezone).
(WordPress 4)
источник
Есть несколько вариантов, ни один из которых не работает отлично. Это ошибка WordPress, и она действительно отстой, потому что время не подходит, если вы не установите свой сайт на UTC ... что сбивает с толку и не всегда даже возможно.
Этот следующий код, я думаю, работает только в том случае, если вы выберете часовой пояс («Настройки» -> «Общие в админке») в качестве названного города вместо смещения номера по Гринвичу. Я не проверял это, но вполне возможно, что
get_option('gmt_offset')
установлен, когдаget_option('timezone_string')
нет.Недостатком этого является то, что WordPress предполагает, что PHP установлен на UTC при создании меток времени mysql, так что вы можете немного испортить свою базу данных при каждом переключении часовых поясов! Не говоря уже о других плагинах WP, можно предположить, что среда PHP всегда находится в UTC.
Итак, если вы просто хотите указать правильное время - вы можете принудительно установить временную метку в UTC с помощью:
К сожалению, хотя это правильно, часовой пояс будет установлен на UTC.
И заметьте , что вы не можете одновременно использовать «истинный» флаг и функции в timezone_set по умолчанию.
Любое правильное решение - это фрагмент кода, который учитывает оба
gmt_offset
ANDtimezone_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 сайте:
источник