WordPress date_i18n 提前一天显示

WordPress date_i18n shows one day earlier

今天我在 WordPress 的 date_i18n 功能上遇到了一个奇怪的问题。它提前一天放映!

$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

我在其他一些网站上检查过它,它工作正常。不确定是什么导致了这个特定网站上的这个问题。有什么想法吗?

date_i18n 根据 Unix 时间戳和以秒为单位的时区偏移量的总和,以本地化格式检索日期。 date_i18n

所以你可能遇到了时区问题。

我找到问题了!这是由于夏令时。

实际上我的时区与 GMT 的当前偏移量是 0,但在 2020-04-07(3 月 29 日之后)是 3600 秒(1 小时)所以 date_i18n 函数 returns 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