Я нашел проблему! Это было связано с переходом на летнее время.
Фактически текущее смещение моего часового пояса с 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