Intereting Posts
Как одновременно обращаться к одной и той же базе данных MySQL в главном столбце и боковой панели WordPress? 500 – внутренняя ошибка сервера параметр rewrite get с настраиваемым типом сообщения Почему WordPress добавляет тему не перечислить конкретную тему? Удаление дубликатов вложений два столбца сообщений на главной странице, один из которых – «избранные», Использование фильтра attachment_fields_to_edit внутри класса плагина Добавление meta_key через pre_get_posts приводит к исчезновению навигации флажки с меткой «ящик» из цикла не будут сохраняться Определить содержание страницы на основе родительской страницы Использование коротких кодов в PHP Как добавить идентификатор сообщения (или любые другие данные) в контактную форму 7? Захватить страницу списка сообщений администратора Содержимое обрезки без форматирования Получить значение массива

Преобразование временных меток в локальное время с помощью date_l18n ()

У меня есть задание cron WordPress, которое периодически отправляет электронное письмо и сохраняет метку времени, когда она была отправлена ​​как опция, и я хотел бы отображать дату на странице настроек. Что-то вроде: «Последнее письмо было отправлено на« x ». Я на западном побережье США, поэтому наше время в настоящее время составляет семь часов от UTC.

Мой ожидаемый результат от date_i18n (), передавая ему временную метку, будет локально отформатированной датой с семичасовой настройкой от UTC. Тем не менее, он возвращает время в UTC. Даже попытка получить текущее время не возвращает то, что я думаю, будет ожидаемым выходом.

Например: echo date_i18n('F d, YH:i'); выходы 05 апреля 2013 г. 11:36 как ожидалось, но echo date_i18n('F d, YH:i',time()); выходы 05 апреля 2013 г. 18:36.

Это намеренно? Как я могу вернуть локально отформатированную дату с уже существующей отметки времени? Спасибо за любую помощь.

Solutions Collecting From Web of "Преобразование временных меток в локальное время с помощью date_l18n ()"

Я знаю, что опоздал на три месяца, но функция, которую вы хотите здесь, – get_date_from_gmt() .

Функция принимает дату GMT / UTC в Ymd H:i:s в качестве первого параметра и желаемый формат даты в качестве второго параметра. Он преобразует вашу дату в местный часовой пояс, как указано на экране настроек.

Пример использования:

echo get_date_from_gmt( date( 'Ymd H:i:s', $my_unix_timestamp ), 'F j, YH:i:s' );

Из кода :

current_time ('timestamp') следует использовать вместо time (), чтобы вернуть местное время блога. В WordPress время PHP () всегда будет возвращать UTC и совпадает с вызовом current_time («timestamp», true).

Попробуй это:

 define( 'MY_TIMEZONE', (get_option( 'timezone_string' ) ? get_option( 'timezone_string' ) : date_default_timezone_get() ) ); date_default_timezone_set( MY_TIMEZONE ); echo date_i18n('F d, YH:i', 1365194723); 

Это устанавливает дату PHP по умолчанию для параметра timezone_string WP, если доступно, в течение всего срока действия скрипта.

date_i18n($format, $timestamp) соответствии с языковым стандартом, но не date_i18n($format, $timestamp) . get_date_from_gmt($datestring, $format) соответствии с get_date_from_gmt($datestring, $format) , но не локалью. Чтобы получить форматирование по часовому поясу и языку, я делаю следующее:

 function local_date_i18n($format, $timestamp) { $timezone_str = get_option('timezone_string') ?: 'UTC'; $timezone = new \DateTimeZone($timezone_str); // The date in the local timezone. $date = new \DateTime(null, $timezone); $date->setTimestamp($timestamp); $date_str = $date->format('Ymd H:i:s'); // Pretend the local date is UTC to get the timestamp // to pass to date_i18n(). $utc_timezone = new \DateTimeZone('UTC'); $utc_date = new \DateTime($date_str, $utc_timezone); $timestamp = $utc_date->getTimestamp(); return date_i18n($format, $timestamp, true); } - function local_date_i18n($format, $timestamp) { $timezone_str = get_option('timezone_string') ?: 'UTC'; $timezone = new \DateTimeZone($timezone_str); // The date in the local timezone. $date = new \DateTime(null, $timezone); $date->setTimestamp($timestamp); $date_str = $date->format('Ymd H:i:s'); // Pretend the local date is UTC to get the timestamp // to pass to date_i18n(). $utc_timezone = new \DateTimeZone('UTC'); $utc_date = new \DateTime($date_str, $utc_timezone); $timestamp = $utc_date->getTimestamp(); return date_i18n($format, $timestamp, true); } 

Пример программы:

 $format = 'F d, YH:i'; $timestamp = 1365186960; $local = local_date_i18n($format, $timestamp); $gmt = date_i18n($format, $timestamp); echo "Local: ", $local, " UTC: ", $gmt; 

Выходные данные для часовой пояс Лос-Анджелеса:

Местное время: 05 апреля 2013 г. 11:36 UTC: 05 апреля 2013 г. 18:36

Добавьте смещение часового пояса к метке времени.

 $offset = get_option( 'gmt_offset' ) * HOUR_IN_SECONDS; return date_i18n( get_option( 'date_format' ), $ts + $offset ); 

или лучше;

 $tz = new DateTimeZone( get_option( 'timezone_string' ) ); $offset_for_that_time = timezone_offset_get ( $tz , new DateTime("@{$ts}") ); return date_i18n ( get_option( 'date_format' ), $ts + offset_for_that_time ); 

Это то, что, похоже, работает на моей машине (ни одна другая работа не работала):

 $tz = new DateTimeZone(get_option('timezone_string')); $dtz = new DateTimeZone('GMT'); foreach($posts as $key => $post){ $gmt_date = DateTime::createFromFormat('Ymd H:i:s', $post->PostDateGMT, $dtz); $gmt_date->setTimeZone($tz); $posts[$key]->PostDateGMT = $gmt_date->format('Ymd H:i:s'); } 

Исходный код: https://www.simonholywell.com/post/2013/12/convert-utc-to-local-time/

Он не использует date_l18n() но я думаю, что можно использовать его позже …