php日期差异计算添加额外的天数

发布于 2025-01-10 17:41:39 字数 492 浏览 0 评论 0原文

尝试在 PHP 中显示两个日期之间的差异。

<?php
    $date1 = new DateTime("2022-03-01");
    $date2 = new DateTime("2022-04-01");
    $interval = $date1->diff($date2);
    echo $interval->days;
    echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 
?>

我得到的结果是:-

31差异0年1个月3天

$interval->days 结果是正确的,但为什么将 $interval->d 设置为 3,而它仅仅相差一个月?

Trying to display difference between two dates in PHP.

<?php
    $date1 = new DateTime("2022-03-01");
    $date2 = new DateTime("2022-04-01");
    $interval = $date1->diff($date2);
    echo $interval->days;
    echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 
?>

I am getting result as:-

31difference 0 years, 1 months, 3 days

$interval->days result is correct, but why having $interval->d as 3 when its just a month difference?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

高速公鹿 2025-01-17 17:41:39

尝试下面

<?php
    $date1 =DateTime::createFromFormat("Y-m-d", "2022-03-01");
    $date2 =DateTime::createFromFormat("Y-m-d", "2022-04-01");
    $interval = $date1->diff($date2);
    echo $interval->days;
    echo " \ndifference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 
?>

Try below

<?php
    $date1 =DateTime::createFromFormat("Y-m-d", "2022-03-01");
    $date2 =DateTime::createFromFormat("Y-m-d", "2022-04-01");
    $interval = $date1->diff($date2);
    echo $interval->days;
    echo " \ndifference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 
?>
神经大条 2025-01-17 17:41:39

它看起来像一个错误,这取决于时区和时间。

使用 UTC 时区,就可以了:

$date1 = new DateTime("2022-03-01 00:00", new DateTimeZone("UTC"));
$date2 = new DateTime("2022-04-01 00:00", new DateTimeZone("UTC"));

相差0年1个月0天

对于欧洲/柏林时区的午夜,我们有 3 天的偏移量:

$date1 = new DateTime("2022-03-01 00:00", new DateTimeZone("Europe/Berlin"));
$date2 = new DateTime("2022-04-01 00:00", new DateTimeZone("Europe/Berlin"));

相差0年1个月3天

凌晨 01:00 还算可以:0 个月但 31 天

$date1 = new DateTime("2022-03-01 01:00", new DateTimeZone("Europe/Berlin"));
$date2 = new DateTime("2022-04-01 01:00", new DateTimeZone("Europe/Berlin"));

0年0月31天

12:00 一切恢复正常:1 个月

$date1 = new DateTime("2022-03-01 12:00", new DateTimeZone("Europe/Berlin"));
$date2 = new DateTime("2022-04-01 12:00", new DateTimeZone("Europe/Berlin"));

0年1个月0天

It looks like a bug, that depends on the timezone and hour.

With UTC timezone, it is OK :

$date1 = new DateTime("2022-03-01 00:00", new DateTimeZone("UTC"));
$date2 = new DateTime("2022-04-01 00:00", new DateTimeZone("UTC"));

difference 0 years, 1 months, 0 days

With Europe/Berlin timezone at midnight, we have the 3 days offset :

$date1 = new DateTime("2022-03-01 00:00", new DateTimeZone("Europe/Berlin"));
$date2 = new DateTime("2022-04-01 00:00", new DateTimeZone("Europe/Berlin"));

difference 0 years, 1 months, 3 days

At 01:00 in the morning, it is kind of OK : 0 month but 31 days

$date1 = new DateTime("2022-03-01 01:00", new DateTimeZone("Europe/Berlin"));
$date2 = new DateTime("2022-04-01 01:00", new DateTimeZone("Europe/Berlin"));

0 years, 0 months, 31 days

At 12:00, everything is right again: 1 month

$date1 = new DateTime("2022-03-01 12:00", new DateTimeZone("Europe/Berlin"));
$date2 = new DateTime("2022-04-01 12:00", new DateTimeZone("Europe/Berlin"));

0 years, 1 months, 0 days

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文