2016-10-10 109 views
2

我正在嘗試使時間間隔爲:$start$end。但$start總是與$end一樣結束,就好像它們都被修改了一樣。如何將一分鐘添加到PHP中的DateTime()對象?

$dt = new \DateTime(); 
$start = $dt; 
$end = $dt->modify('+1 minute'); 
echo $start->format('i') . ' - ' . $end->format('i'); 

這只是給了我

50 - 50

當我想

49 - 50

我在做什麼錯?

編輯: 我不想使用時間戳,只有DateTime()對象。

+6

'$ start'指的是與'$ end'相同的對象,make 2個日期時間對象 – apokryfos

回答

4

爲什麼發生這種情況

$start$end都指向同一個對象,所以當你添加1分鐘$dt$start$end將反映這一變化。

你可以做什麼

要修復,設置$start$end到datetime對象的新實例。

​​
1

您創建一個DateTime對象$dt,然後使用相同的對象既$start$end。你應該做下列之一:

$dt = new \DateTime(); 
$start = $dt->format('i'); //Store the actual string before modifying 
$dt->modify('+1 minute'); 
echo $start . ' - ' . $end->format('i'); 

或者:

$start = new \DateTime(); 
$end = new \DateTime();  
$end->modify('+1 minute'); 
echo $start->format('i') . ' - ' . $end->format('i'); 
3

到已經給出答案,另一種方法是使用

  • DateTimeImmutable - 這個類的行爲一樣的DateTime除了它從不修改它自己,而是返回一個新的對象。

例子:

$start = new \DateTimeImmutable(); 
$end = $start->modify('+1 minute'); 
echo $start->format('i') . ' - ' . $end->format('i'); 

這將使您預期的結果。

+0

不知道DateTimeImmutable是一個非常簡潔的解決方案。 –