对象中的PHP DateTime不会在循环中保持原始值

时间:2017-09-27 17:52:18

标签: php arrays datetime

我在PHP中有数组,其中包含我想要添加到该日期的日期和天数。当我循环这些日期并添加指定的数量时,每个循环的[date]值会随着循环的每次传递而增加。这是我的阵列......

        Array
            (
                [0] => Array
                (
                    [date] => DateTime Object
            (
                [date] => 2017-10-10 06:00:00.000000
                        [timezone_type] => 2
                        [timezone] => GMT
                    )

                [daysToAdd] => 3
            )

        [1] => Array
            (
                [date] => DateTime Object
            (
                [date] => 2017-10-10 06:00:00.000000
                        [timezone_type] => 2
                        [timezone] => GMT
                    )

                [daysToAdd] => 5
            )

        [2] => Array
            (
                [date] => DateTime Object
            (
                [date] => 2017-10-10 06:00:00.000000
                        [timezone_type] => 2
                        [timezone] => GMT
                    )

                [daysToAdd] => 10
            )

    )

我将所有这些数据传递给一个处理它的函数......

->processDates($data);

我的PHP函数内部......

foreach($array['dates'] as $day){
        $originalDateTime = $day['date']; # original dateTime
        $dateTime = $day['date']; # the dateTime as a new var
        $dateTime = $dateTime->modify('+'.$day['daysToAdd'].' days'); // modify the dateTime
        print_r([
            'originalDate'=>$originalDateTime,
            'newDate'=>$dateTime,
        ]);
    }

当第一个元素在函数内部运行时会发生这种情况......

!!! The original date is also incremented by the value passed when I added it back to the array, even though i set it as a completely unmodified variable inside of the function !!!

    Array
    (
        [originalDate] => DateTime Object
            (
                [date] => 2017-10-13 06:00:00.000000
                [timezone_type] => 2
                [timezone] => GMT
            )

        [newDate] => DateTime Object
            (
                [date] => 2017-10-13 06:00:00.000000
                [timezone_type] => 2
                [timezone] => GMT
            )

    )

This is what happens when the second element is ran inside of the function...

    Array
    (
        [originalDate] => DateTime Object
            (
                [date] => 2017-10-18 06:00:00.000000
                [timezone_type] => 2
                [timezone] => GMT
            )

        [newDate] => DateTime Object
            (
                [date] => 2017-10-18 06:00:00.000000
                [timezone_type] => 2
                [timezone] => GMT
            )

    )

这就是第3次迭代发生的事情......

    Array
    (
        [originalDate] => DateTime Object
            (
                [date] => 2017-10-28 06:00:00.000000
                [timezone_type] => 2
                [timezone] => GMT
            )

        [newDate] => DateTime Object
            (
                [date] => 2017-10-28 06:00:00.000000
                [timezone_type] => 2
                [timezone] => GMT
            )

    )

每次我遍历数组时,原始日期时间都被 - &gt;修改搞砸了。如何防止这种情况,以便每个循环完全重置并使用传入的实际数据。我需要['originalDate']维持原来设置为“2017-10-10 06:00:00.000000”... < / p>

感谢。

0 个答案:

没有答案