2012-05-02 12 views
6

mam tego dość prosty kod:Dodawanie miesięcy DateTime z DateInterval zmienia pierwotną datę, aby dopasować nową datę

$start_date = new DateTime($post['start_date']); 
$end_date = $start_date->add(new DateInterval('P6M')); 
echo $start_date->getTimestamp(); // 1351836000 
echo $end_date->getTimestamp(); // 1351836000 

oczywiście zarówno skończyć jako ten sam znacznik czasu, ponieważ dodanie przedział dat wpływa na oryginalną $ START_DATE . Więc jak mam to zrobić, aby zachować oryginalną $ start_date, ale dodać jeszcze 6 miesięcy w innej zmiennej?

Próbowałem to bez powodzenia:

$start_date = new DateTime($post['start_date']); 
$start_date_actual = $start_date; 
$end_date = $start_date_actual->add(new DateInterval('P6M'))->getTimestamp(); 

Odpowiedz

12

Zmienne posiadają referencje do obiektów, a nie same obiekty. Tak więc zadanie przynosi więcej zmiennych wskazujących na ten sam obiekt, a nie na wiele kopii obiektu.

Jeśli chcesz kopię, użyj clone kluczowe:

$end_date = clone $start_date; 
$end_date->add(new DateInterval('P6M')); 
+0

nauczyć się czegoś nowego każdego dnia. Dzięki, Mark! – dallen

1

Można sobie wybrać:

$start_date = new DateTime($post['start_date']); 
$end_date = new DateTime($post['start_date']); 
$end_date->add(new DateInterval('P6M')); 

lub

$start_date = new DateTime($post['start_date']); 
$end_date = clone $start_date; 
$end_date->add(new DateInterval('P6M')); 
Powiązane problemy