好的,所以我试图得到两个变量。一个是昨天的日期,一个是从今天起六天的日期。这是我可以查询谷歌日历本周发生的事件。 我正在构建一个日期时间对象,将日期设置为今天,然后尝试将值存储在两个新变量中。但是,当我设置第二个变量时,第一个变量也会被修改。它似乎是通过对对象的引用来分配变量,而不是我试图坚持它的值。
$todayData = explode("-", date("Y-m-d", Time()));
//Get DateTime for Yesterday
$today = new DateTime();
$today->setDate($todayData[0], $todayData[1], $todayData[2]);
echo $today->format("Y-m-d");
echo "<br />";
//Yesterday
$startDate = $today->modify("-1 day");
echo $startDate->format("Y-m-d");
echo "<br />";
//End of the week
$endDate = $today->modify("+6 day");
echo $endDate->format("Y-m-d");
echo "<br />";
//recheck yesterday
echo $startDate->format("Y-m-d");
答案 0 :(得分:1)
当您修改$ today时,您正在修改对新创建的对象的引用。反过来,由于$ startDate和$ endDate都引用了$ today,他们正在查看相同的对象。
一种解决方案是每次调用我假设你创建的modify()方法时返回一个新的DateTime对象。这样就可以在每次使用modify()时都有一个全新的日期,但这样就不会真正修改原始的DateTime对象。
另一种选择是在对象中使用克隆。这使得一个新对象具有与您要复制的对象相同的值。见这里:http://php.net/manual/en/language.oop5.cloning.php
答案 1 :(得分:0)
正如@Doug解释为什么这不起作用的原因是因为$startDate
和$endDate
引用了同一个对象。
以下是一个快速解决方案:http://codepad.org/SKigfebO
我个人不会使用DateTime
对象。您可以使用mktime
执行此类操作:
$startDate = date('Y-m-d', mktime(date('H'), date('i'), date('s'), date('n'), date('j') - 1, date('Y')));
$endDate = date('Y-m-d', mktime(date('H'), date('i'), date('s'), date('n'), date('j') + 6, date('Y')));