dongyi3776 2016-05-30 07: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 07: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条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部