2012-05-02 11 views
6

ho questo codice piuttosto semplice:Aggiunta mesi per DateTime con DateInterval cambia data originale per abbinare nuova data

$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 

Naturalmente, sia finire come la stessa data e ora, perché l'aggiunta del l'intervallo di date colpisce il $ start_date originale . Quindi, come faccio a fare questo, così posso mantenere l'originale $ start_date e aggiungerne altri 6 in un'altra variabile?

ho provato questo senza fortuna:

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

risposta

12

variabili tengono riferimenti a oggetti, non gli oggetti stessi. Quindi l'assegnazione ti porta solo più variabili che puntano allo stesso oggetto, non più copie dell'oggetto.

Se si desidera una copia, utilizzare la parola chiave clone:

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

imparare qualcosa di nuovo ogni giorno. Grazie, Marco! – dallen

1

Potete fare la vostra scelta:

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

o

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