PHP DateInterval未应用于DateTime对象

时间:2013-04-30 10:18:04

标签: php date dateinterval

我想从第一天开始制作一个数组,并在最后一个月结束。

$days = array();
$sdays = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
$d = new DateTime();
$d->modify('first day of this month');
for($i; $i<$sdays; $i++)
{
    $days[(int)$d->format('W')][(int)$d->format('N')] = $d->format('Y-m-d');
    $d->add(new DateInterval('P1D'));
}
print_r($days);
exit();

所以这很简单。 但结果看起来像DateInterval函数不能正常工作。

期望:

Array
(
    [14] => Array // week
        (
            [1] => 2013-04-01
            [2] => 2013-04-02
            [3] => 2013-04-03
...

现实:

Array
(
    [14] => Array
        (
            [1] => 2013-04-01
        )
)

是的,方法,如何修复这个也很简单,创建另一个DateTime对象,修改到第一天,然后从第一天创建一个新的DateTime对象,然后你可以添加DateInterval。

因此,在我通过$ d-&gt;修改我的DateTime对象后,修改后无法添加日期。但问题是为什么?我想明白这一点。

感谢您的回答。

REPAS

1 个答案:

答案 0 :(得分:2)

您始终使用相同的对象,它引用相同的数据。 你需要克隆它

<?php
$days = array();
$sdays = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
$d = new DateTime();
$d->modify('first day of this month');

for($i = 0; $i<$sdays; $i++)
{
    $v = clone $d;
    $v->modify("+$i day");
    $days[(int)$v->format('W')][(int)$v->format('N')] = $v->format('Y-m-d');

}
print_r($days);