2013-07-31 15 views
9

My Form 2 alan vardır - Time_from ve Time_toDateTime eklemek 1 gün

Şimdi ben ex (o günlerde arasında bir fark gidecekseniz ise) her gün için benim veritabanında bir giriş eklemek gerekir. Time_from = 2013/08/26 08:00:00 ve Time_to = 16:00:00 2013/08/28 Yani benim veritabanında ben 3 girişleri

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 

Yani bu amaçla i yaptık almalısınız Bu iki tarih arasındaki farkı ilk bulduğum ve daha sonra bu 2 tarihin olduğu kadar çok gün içinde çalışacak bir for döngüsü kullanıyorum ve sonunda 1 gün ekledim.

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'); 
    } 
} 

Bazı nedenlerden dolayı kod çalışmaz.

ben sadece ilk gün benim veritabanına kaydedilir date_modify alanını kaldırdığınızda

Ama kodunda date_modify ile, sadece son gün kaydedilir (döngü ancak o zaman bir kez çalışıyor Tahmin) veritabanı.

+0

$ interval-> d böylece döngü sadece Böylece bir kez fark – Anigel

+0

çalışacaktır verilen zamanlarda hayır "günler" fark sadece saatler var, günler arasında sadece saat i gösteriliyor? – CreamYGEEK

+0

http://phpfiddle.org/main/code/3r1-6hc $ interval-> h aralık yerine>> d – Anigel

cevap

21

Eğer DataTime nesnenin işlevini ekleyin kullanabilirsiniz

burada ben

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

ÇIKIŞ

2000-01-02 

Umut gibi gönderilme tarihine tane 1 eklemek için size bir örnek veriyorum

Sorununuzu çözmenize yardımcı olacaktır.

+0

istemediğinizden emin misiniz? Hala aynı sonucu alıyorum, sadece son gün veri tabanına kaydedilir . – CreamYGEEK

+0

yeni DateTime'dan (“randevunuz”) geçmeden önce izleme tarihini lütfen; ve fonksiyonunuz her seferinde yeni tarihin geri döndürülmesi anlamına gelir. – liyakat

+0

Size çözüm işe yarayacak .. Görünüşe göre bir JQuery problemi var, bu hatadan sorumlu .. – CreamYGEEK

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

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

Sen de yapabilirsiniz:

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