Intereting Posts
Доступ к идентификатору почты внутри цикла Как я могу программно сохранять данные в пользовательские поля, содержащие сериализованные данные? WordPress, создающий 404s под тегами блога Как вы используете отображаемый образ последнего сообщения в категории в качестве фонового изображения Как получить «строку» прочь – заменить «ничего» Как правильно вставить ссылку в шаблон в WordPress? Css загружается очень медленно update_option () обновление опции с пустым значением? Укажите пользовательский php.ini для использования с WP-CLI add_settings_field Данные, не переходящие на страницу параметров Выполните функцию, используя ajax События: проверьте другое событие с той же датой начала и категорией Сообщения в блогах повторяются Получить данные формы ввода, размещенные пользователями Можно ли использовать один пул для множественных таксономий?

Как преобразовать DateTime () для отображения времени, основанного на настройке часового пояса WordPress?

Мне нужно использовать PHP DateTime() . В настоящее время отображается время GMT вместо времени, установленного для установки часового пояса (EST) в WordPress Admin.

Как это можно преобразовать, чтобы показать временную базу

 $time = new DateTime(); echo $time->format("Ymd h:i:s"); // 2015-08-12 04:35:34 (gmt) // 2015-08-12 12:35:34 (what i want -- EST) 

Solutions Collecting From Web of "Как преобразовать DateTime () для отображения времени, основанного на настройке часового пояса WordPress?"

Я не уверен, почему ответ EliasNS помечен правильно, насколько мне известно (и из документации ), второй параметр DateTime::__construct() , если он предоставлен, должен быть экземпляром DateTimeZone .

Затем возникает проблема, как мы создаем экземпляр DateTimeZone . Это легко, если пользователь выбрал город в качестве своего часового пояса, но мы можем обойти его, если они установили смещение, используя (устаревшие) тайм-коды Etc / GMT.

 /** * Returns the blog timezone * * Gets timezone settings from the db. If a timezone identifier is used just turns * it into a DateTimeZone. If an offset is used, it tries to find a suitable timezone. * If all else fails it uses UTC. * * @return DateTimeZone The blog timezone */ function wpse198435_get_blog_timezone() { $tzstring = get_option( 'timezone_string' ); $offset = get_option( 'gmt_offset' ); //Manual offset... //@see http://us.php.net/manual/en/timezones.others.php //@see https://bugs.php.net/bug.php?id=45543 //@see https://bugs.php.net/bug.php?id=45528 //IANA timezone database that provides PHP's timezone support uses POSIX (ie reversed) style signs if( empty( $tzstring ) && 0 != $offset && floor( $offset ) == $offset ){ $offset_st = $offset > 0 ? "-$offset" : '+'.absint( $offset ); $tzstring = 'Etc/GMT'.$offset_st; } //Issue with the timezone selected, set to 'UTC' if( empty( $tzstring ) ){ $tzstring = 'UTC'; } $timezone = new DateTimeZone( $tzstring ); return $timezone; } 

Затем вы можете использовать его следующим образом:

 $time = new DateTime( null, wpse198435_get_blog_timezone() ); 

Я разработал метод в моей lib, чтобы получить текущий часовой пояс WP в качестве подходящего объекта: WpDateTimeZone::getWpTimezone() .

Хотя timezone_string прост (уже допустимое имя часового пояса), случай gmt_offset является неприятным. Лучшее, что я мог придумать, это преобразовать его в формат +00:00 :

 $offset = get_option( 'gmt_offset' ); $hours = (int) $offset; $minutes = ( $offset - floor( $offset ) ) * 60; $offset = sprintf( '%+03d:%02d', $hours, $minutes ) 

DateTime aceppts параметр DateTimeZone , который вы можете получить из параметров WordPress. Что-то вроде:

 $time = new DateTime(NULL, get_option('gmt_offset')); 
  • DateTime
  • WordPress TimeZone

Надеюсь это поможет.

Изменить: я тестирую его, и я получаю сообщение об ошибке. Я не знаю, как преобразовать timezone string в объект DateTimeZone , но так оно и есть.