2012-05-02 24 views
6

tôi có mã khá đơn giản này:Thêm tháng để DateTime với DateInterval thay đổi ngày ban đầu để phù hợp với ngày mới

$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 

Tất nhiên, cả hai đều kết thúc như là dấu thời gian như nhau vì thêm khoảng ngày ảnh hưởng đến $ start_date gốc . Vì vậy, làm thế nào để tôi đi về điều này vì vậy tôi có thể giữ $ start_date ban đầu được thêm 6 tháng để nó trong một biến?

Tôi cố gắng này không có may mắn:

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

Trả lời

12

Biến giữ tham chiếu đến đối tượng, không phải là đối tượng chính mình. Vì vậy, nhiệm vụ chỉ giúp bạn có thêm nhiều biến trỏ đến cùng một đối tượng, không phải nhiều bản sao của đối tượng.

Nếu bạn muốn một bản sao, sử dụng clone keyword:

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

Tìm hiểu một cái gì đó mới mỗi ngày. Cảm ơn, Mark! – dallen

1

Bạn có thể đưa ra lựa chọn:

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

hoặc

$start_date = new DateTime($post['start_date']); 
$end_date = clone $start_date; 
$end_date->add(new DateInterval('P6M')); 
Các vấn đề liên quan