首页 > 解决方案 > 3 天!= 72 小时,PHP 中的 DateInterval

问题描述

从 DateTime 对象中减去时间(小时)的简单任务让我感到疑惑。

我有一个 DateTime,就我而言2021-03-28 08:45

我想从那个时间点回来 3 天。为此,我克隆了我的开始日期并减去了 3 天。

$startMinusDays = (clone $startDate)->sub(new DateInterval('P3D'));

这在理论上应该与这样做相同:

$startMinusHours = (clone $startDate)->sub(new DateInterval('PT72H'));

然而,2个结果是不同的:

日期 - 3 天 : 2021-03-25 08:45:00

日期 - 72 小时:2021-03-25 07:45:00

这是完整的 poc 代码:

这是一个完整的示例(https://3v4l.org/j94ae

<?php
$startDate = date_create_from_format(
    'Y-m-d H:i',
    '2021-03-28 08:45',
    new DateTimeZone("Europe/Madrid")
);

$startMinusDays = (clone $startDate)->sub(new DateInterval('P3D'));
$startMinusHours = (clone $startDate)->sub(new DateInterval('PT72H'));

echo "Date:          : ".$startDate->format('Y-m-d H:i:s');
echo "\n";
echo "Date - 3 Days  : ".$startMinusDays->format('Y-m-d H:i:s');
echo "\n";
echo "Date - 72 Hours: ".$startMinusHours->format('Y-m-d H:i:s');

我在这里想念什么?我觉得我站在软管上。

该计算似乎适用于我尝试的所有其他时间。

标签: phpdatetimedateinterval

解决方案


推荐阅读