PHP DateTime 在跨 DST 边界添加时未正确计算时间分量

PHP DateTime does not correctly calculate time component when adding across DST boundaries

考虑以下代码

$participantTriggerDate = new \DateTime('2019-06-14 09:40:00.000000', new DateTimeZone('US/Central'));
$dateInterval = new \DateInterval('P150D');

$newDate = \DateTimeImmutable::createFromMutable($participantTriggerDate);
$newDate = $newDate->add($dateInterval);

echo(json_encode([
    'participantTriggerDate' => $participantTriggerDate,
    'newDate' => $newDate,
]));

此代码产生以下输出:

{
  "participantTriggerDate": {
    "date": "2019-06-14 09:40:00.000000",
    "timezone_type": 3,
    "timezone": "US/Central"
  },
  "newDate": {
    "date": "2019-11-11 09:40:00.000000",
    "timezone_type": 3,
    "timezone": "US/Central"
  }
}

但是,因为 2019-06-14 过去 150 天跨越了 DST 边界,PHP 不应该从时间中减去小时吗?我认为 PHP 处理了幕后所有混乱的 DST 问题。有没有办法让我正确计算这个时间?从我读过的内容来看,推荐的答案似乎是将所有内容都转换为 UTC 并在那里进行计算。如果可能的话,我想避免这种情况。我认为 PHP 足够聪明,可以知道当我将时区传递到 DateTime 创建时跨越了 DST 边界。

添加整天时,PHP 会生成相同的一天中的时间,即使 DST 已更改。如果要在不进行此调整的情况下添加时间间隔,则需要添加小时而不是天。将天数乘以 24 得到这个。

$dateInterval = new \DateInterval('PT3600H'); // 3600 = 150*24