我遍历一个包含两个“旺季”的数组(使用一个foreach循环)。对象 - 这两个对象具有id,开始日期和结束日期。我通过getter得到了旺季的开始日期并将其分配给一个变量,当我循环通过旺季开始日期和结束日期的日期差异时,意图增加月份。当我循环显示日期差异时,将预订开始日期和结束日期与我按月增加的变量进行比较,然后变量"包含"日期增加一个月。
此变量是否包含对数组的高级对象的开始日期属性的引用?当我转储高季节数组时,开始日期已更改为与已增加一个月的变量相同的日期。如何获取旺季开始日期属性的值而不是数组对象的开始日期的引用?
我使用的是PHP 5.5.30。
foreach ($highseasons as $highseason) {
$HSDate = $highseason->getStartDate();
$diff = date_diff($highseason->getStartDate(), $highseason->getEndDate());
$months = (int)$diff->format('%m');
$SDBool = false;
$EDBool = false;
// loop through the date difference
for ($i = 0; $i <= $months; $i++) {
var_dump($highseasons);
$HSMonth = $HSDate->format('m');
$BookingStartingMonth = $value->getStartDate()->format('m');
$BookingEndingMonth = $value->getEndDate()->format('m');
if ($HSMonth == $BookingStartingMonth) {
$SDBool = true;
}
if ($HSMonth == $BookingEndingMonth) {
$EDBool = true;
}
// add one month onto the high season date
$HSDate->add(new DateInterval('P1M'));
}
}
答案 0 :(得分:1)
由于开始日期是DateTime对象,因此它是一个引用,修改它也会改变高阶季节开始日期的值(因为它们是同一个对象)。
为了满足您的要求,您需要clone
DateTime对象:
$tempDate = clone $HSDate;
并改为增加新的日期对象。