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

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 ensp路由器启动不了一直报#
  • ¥50 安卓10如何在没有root权限的情况下设置开机自动启动指定app?
  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了
  • ¥15 数学建模数学建模需要
  • ¥15 已知许多点位,想通过高斯分布来随机选择固定数量的点位怎么改
  • ¥20 nao机器人语音识别问题
  • ¥15 怎么生成确定数目的泊松点过程
  • ¥15 layui数据表格多次重载的数据覆盖问题