dongyi3776 2016-05-30 15:09
浏览 84
已采纳

PHP - 使用DateInterval添加和减去天奇怪的错误

I am trying to add and subtract # of days to a date using date_add and date_sub, but I get some weird results. I assume this is an easy answer I am just not versed enough in PHP to know why.

Here is my code:

$y = new DateTime('2016-05-17');
$z2 = 7;
$tempy = $y;
$tempy->sub(new DateInterval('P' . $z2 . 'D'));
$startdate = date_format($tempy, "Y-m-d");
$y->add(new DateInterval('P' . $z2 . 'D'));
$enddate = date_format($y, "Y-m-d");
echo "Start: " . $startdate . "  End: " . $enddate . "
";

This is the result:

Start: 2016-05-10 End: 2016-05-17

It looks like even though I use a temporary variable $tempy for the start date it still modifies it and the end date is off.

EDIT: Expected results:

Start: 2016-05-10 End: 2016-05-24

  • 写回答

4条回答 默认 最新

  • doumeng4400 2016-05-30 15:14
    关注

    When you do :

    $tempy = $y;
    

    You create a pseudo reference to the first object, you don't actually copy it. To do so you need to use the clone keyword :

    $tempy = clone $y;
    

    Now things will work as you expect. Without cloning, when you modify $tempy it will also modify $y

    EDIT : Adding link to manual about this (from @Devon's answer) http://php.net/manual/en/language.oop5.references.php

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀