2012-05-02 11 views
6

tengo este código bastante simple:Adición meses a DateTime con DateInterval cambia fecha original para que coincida con la nueva fecha

$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 

Por supuesto, ambos terminan siendo la misma marca de tiempo debido a la adición del intervalo de fechas afecta a los $ fecha_inicial originales . Entonces, ¿cómo hago para mantener el original $ start_date y agregarle 6 meses en otra variable?

yo probamos este sin suerte:

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

Respuesta

12

variables tienen referencias a objetos, no los objetos mismos. Así que la asignación solo te da más variables que apuntan al mismo objeto, no múltiples copias del objeto.

Si desea una copia, utilice la palabra clave clone:

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

aprender algo nuevo cada día. Gracias, Mark! – dallen

1

Usted puede tomar su selección:

$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')); 
Cuestiones relacionadas