2013-07-31 156 views
9

我的形式有2場 - Time_from和Time_to日期時間加1天

現在我需要添加在我的數據庫每天的條目(如果是孤單那些日子之間的差異) 前。 Time_from = 2013年8月26日08:00:00和Time_to = 2013年8月28日16:00:00 所以在我的數據庫中,我應該得到3項

Time_from = 2013-08-26 08:00:00 and Time_to = 2013-08-26 16:00:00 
Time_from = 2013-08-27 08:00:00 and Time_to = 2013-08-27 16:00:00 
Time_from = 2013-08-28 08:00:00 and Time_to = 2013-08-28 16:00:00 

因此,對於這個目的我已經做了方法,在那裏我首先找到這兩個日期之間的差異,然後我使用for循環,這將運行多天的差異這兩個日期,最後我只是增加1天。

public function createOffer($offer) 
{ 
$time_from = new DateTime($offer->time_from); 
$time_to = new DateTime($offer->time_to); 
$interval = $time_from->diff($time_to); 

for ($counter = 0; $counter <= $interval->d; $counter++) { 
    $offer->time_from = $time_from->format('Y-m-d H:i:s'); 
    $offer_time_to = new DateTime($time_from->format('Y-m-d')); 
    $offer_time_to->setTime($time_to->format('H'), $time_to->format('i') 
     , $time_to->format('s')); 
    $offer->time_to = $offer_time_to->format('Y-m-d H:i:s'); 

    if ($offer->validate()) { 
    $offer->save(); 
    } 

    date_modify($time_from, '+1 day'); 
    } 
} 

由於某些原因,代碼無法正常工作。

當我刪除date_modify場只是第一天將被保存在我的數據庫(猜for循環只運行一次,然後)

但在我的代碼date_modify,只有最後一天被保存在數據庫。

+0

$ interval-> d沒有「天」的區別,只有時間,在時代賦予這樣的循環將只運行一次 – Anigel

+0

等方面差異幾天之間只顯示i小時? – CreamYGEEK

+0

http://phpfiddle.org/main/code/3r1-6hc你確定你不想要$ interval-> h而不是interval-> d – Anigel

回答

21

您可以使用添加DATATIME對象的功能

在這裏我給大家舉一個例子添加一個1在您的文章日期像

<?php 
$date = new DateTime('2000-01-01'); 
$date->add(new DateInterval('P1D')); 
echo $date->format('Y-m-d') . "\n"; 
?> 

輸出

2000-01-02 

希望它一定會幫助你解決你的問題。

+0

我仍然得到相同的結果,只有最後一天被保存在數據庫中。 – CreamYGEEK

+0

請在您傳入新DateTime('您的日期')之前跟蹤日期;並且每次新日期意味着您需要從函數調用或返回值的3次時,應該返回您的函數。 – liyakat

+0

你的解決方案似乎工作..顯然有一個JQuery的問題,這是負責的bug .. – CreamYGEEK

2
$date = new DateTime('2017-01-17'); 
$date->modify('+1 day'); 

echo $date->format('Y-m-d'); // 2017-01-18 

你也一樣可以做到:

$dateTo = new \DateTime('1980-12-07 +1 day'); 
echo $dateTo->format('Y-m-d'); // 1980-12-08