2014-06-19 25 views
1

如何爲指定變量添加DateInterval的日期。PHP爲指定變量添加日期函數

<?php 
$begin = new DateTime('2010-01-01 08:00'); 
$end = new DateTime('2010-01-05 20:00'); 

$interval = new DateInterval('P1D'); 
$period = new DatePeriod($begin, $interval, $end); 

foreach ($period as $dt) { 
    $tempBegin = $tempEnd = $dt; 
    $tempEnd->add(new DateInterval('P1D')); 

    echo $tempEnd->format("Y-m-d H:i") . '<br/>'; 
    echo $tempBegin->format("Y-m-d H:i") . '<br/>'; 
} 

它會給結果是這樣的:

2010-01-02 08:00 
2010-01-02 08:00 
2010-01-03 08:00 
2010-01-03 08:00 
2010-01-04 08:00 
2010-01-04 08:00 
2010-01-05 08:00 
2010-01-05 08:00 
2010-01-06 08:00 
2010-01-06 08:00 

我想增加1天只爲$tempBegin變量。謝謝。

+0

見http://stackoverflow.com/questions/2579458/how-do-i-deep-copy-a-datetime-object – Barmar

+0

爲什麼這個問題看起來很像http://stackoverflow.com/q/24317227/?編輯:沒關係,我看到它是['你的答案之一](http://stackoverflow.com/a/24317979/); *比扎羅*。 –

+0

@ Fred-ii-是的,我試圖回答這個問題,併爲這個克隆功能奮鬥了近40分鐘。我正在等待某個人正確回答,但如果我不能以某種方式將其分開,我很難入睡。所以我用類似的例子創造了不同的問題。它違反規則嗎? –

回答

3

當您分配對象時,您不會創建副本。所以變量$tempBegin$tempEnd都指向同一個對象,並且當您使用add()對其進行修改時,它將修改兩個變量所引用的對象。

您需要克隆的對象:

$tempBegin = $dt; 
$tempEnd = clone $tempBegin; 
$tempEnd->add(new DateInterval('P1D')); 
+0

它的工作。非常感謝你。 –