Intereting Posts
is_front_page не работает вообще ни в одном из файлов .php тем. Как я могу одновременно устанавливать файлы cookie как для безопасного, так и для небезопасного происхождения? Удалите раздел «Подробности приложения» в медиаплеере wordpress Как указать URL-адрес для вызова ajax в плагине wordpress Подключение локальной среды к промежуточной базе данных сервера Использование перерывов цикла foreach Необходим обходной путь для небезопасного запроса конечной точки XMLHttpRequest Получить последние сообщения из нескольких категорий Мета-значение не сохраняется для запланированных сообщений У меня проблемы с загрузкой javascripts Как проверить, что поле имеет значение, прежде чем добавлять термин к таксономии Преобразование временных меток в локальное время с помощью date_l18n () Search Console определяет данные разбивки по категориям как дублирующиеся мета-описания есть способ, посредством которого пользователь вводит содержимое в редакторе. элементы мультимедиа будут сохраняться с относительным путем цифровой виджет будильника

Как преобразовать 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 , но так оно и есть.