一種方法,只用PHP(而不是使用SQL)做的,時間是在第二管理來簡化計算:
$reservation = new Reservation(); // Your entity object
$startDate = new \DateTime('now');
$endDate = $startDate;
$endDate->modify('+'.4500.' seconds'); // Update the end time with the duration of the service
$reservation->setStartDate($startDate);
$reservation->setEndDate($endDate);
// Save the reservation
$em = $this->getDoctrine()->getManager();
$em->persist($reservation);
$em->flush();
編輯1:
要回答你的時區的問題,最更容易(我認爲)是使用時間戳!在顯示時,時間戳將被轉換爲時區日期。從日期時間獲取時間戳時,它是相同的,它是根據計算機的時區計算的。
// ...
// Save timestamp instead of datetime
$reservation->setStartTimestamp($startDate->getTimestamp());
$reservation->setEndTimestamp($endDate->getTimestamp());
// ...
編輯2:
爲了回答您的評論,如果你有時間的變化,只是在保存數據庫中的持續時間,從而時間戳時區^^
這裏的片段編輯之間共享。
// First save
$reservation->setDuration(4000); // seconds
和編輯的持續時間時:
// Duration of a reservation change
// <- Load the $reservation to edit
$date = new \DateTime();
$date->setTimestamp($reservation->getStartTimestamp()); // Got start date
$reservation->setDuration($reservation->getDuration() + 2000); // For example, duration is increased of 2000 second
$endDate = $date;
$endDate->modify('+'.$reservation->getDuration().' seconds'); // Use start date and recalculate new end date
$reservation->setEndTimestamp($endDate->getTimestamp());
// <- Then update $reservation with a persist
這是一個好主意,但如果我加入一些保留與持續時間拉特說,第二天4天,有將時間轉移?那麼我認爲它不會奏效。對? – newicz
查看我最後一次編輯,但是這是一個完整的PHP解決方案,我不知道它是否適合您,或者您是否需要唯一的教義解決方案! – Sybio