WordPress date_i18n показывает на день раньше - PullRequest
0 голосов
/ 10 февраля 2020

Сегодня я столкнулся со странной проблемой в date_i18n функции WordPress. Он показывает на день раньше!

$start_date = '2020-04-07';
$end_date = '2020-04-28';
$start_timestamp = strtotime($start_date); // int(1586214000)
$end_timestamp = strtotime($end_date); // int(1588028400)

$i18n_start_date = date_i18n($format, $start_timestamp); // Apr 06 2020
$i18n_end_date = date_i18n($format, $end_timestamp); // Apr 27 2020

Я проверил его на некоторых других сайтах, и он работал нормально. Не уверен, что создает эту проблему на этом сайте c. Есть мысли?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

date_i18n извлекает дату в локализованном формате на основе суммы Unix отметки времени и смещения часового пояса в секундах. date_i18n

Так что у вас, вероятно, проблемы с часовым поясом.

0 голосов
/ 11 февраля 2020

Я нашел проблему! Это было связано с переходом на летнее время.

Фактически текущее смещение моего часового пояса с GMT равно 0, но в 2020-04-07 (после 29 марта) оно составляет 3600 секунд (1 час), поэтому функция date_i18n возвращает 2020-04-06 23: 00: 00 вместо 2020-04-07 00: 00: 00

Мне удалось исправить это, добавив смещение к временные метки.

$start_date = '2020-04-07';
$end_date = '2020-04-28';

$start_timestamp = strtotime($start_date); // int(1586214000)
$end_timestamp = strtotime($end_date); // int(1588028400)

$timezone_GMT = new DateTimeZone("GMT");
$timezone_site = new DateTimeZone('Europe/Dublin');

$dt_now = new DateTime("now", $timezone_GMT);
$dt_start = new DateTime($start_date, $timezone_GMT);
$dt_end = new DateTime($end_date, $timezone_GMT);

$offset_now = $timezone_site->getOffset($dt_now);
$offset_start = $timezone_site->getOffset($dt_start);
$offset_end = $timezone_site->getOffset($dt_end);

if($offset_now != $offset_start)
{
    $diff = $offset_start - $offset_now;
    $start_timestamp += $diff;
}

if($offset_now != $offset_end)
{
    $diff = $offset_end - $offset_now;
    $end_timestamp += $diff;
}

$i18n_start_date = date_i18n($format, $start_timestamp); // Apr 07 2020
$i18n_end_date = date_i18n($format, $end_timestamp); // Apr 28 2020
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...