2013-07-31 4 views
9

Моя форма имеет 2 поля - Time_from и Time_toDateTime добавить 1 день

Теперь мне нужно, чтобы добавить запись в моей базе данных на каждый день (если Theres разница между этими дней) отл. Time_from = 2013-08-26 8:00:00 и Time_to = 2013-08-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 поле только первый день будет сохранен в моей базе данных (Угадай цикл работает только один раз в то время)

Но с date_modify в моем коде, только в последний день сохраняется в базы данных.

+0

$ interval-> d нет никакой разницы «дней», всего за несколько часов, в указанное время, так что цикл будет выполняться только один раз – Anigel

+0

Так разницу между днями показывается только часы? – 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 ('your date'); и ваша функция должна возвращаться каждый раз, когда новая дата означает 3 раза, когда вам нужно позвонить или вернуть значение из функции. – liyakat

+0

Вы, похоже, работаете. Очевидно, есть проблема JQuery, которая отвечает за ошибку. – 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 
Смежные вопросы