web-dev-qa-db-ja.com

DateTimeは1日追加します

私のフォームにはTime_fromとTime_toの2つのフィールドがあります

今、私は毎日データベースにエントリを追加する必要があります(それらの日の間で違いがある場合)例。 Time_from = 2013-08-26 08: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

したがって、その目的のために、最初にこれらの2つの日付の差を見つけ、次に2つの日付の差で何日も実行される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ループが実行されるのは1回だけです)。

しかし、私のコードにdate_modifyを指定すると、最終日のみがデータベースに保存されます。

13
CreamYGEEK

datatimeオブジェクトのAdd関数を使用できます

ここで私はあなたの投稿日に1を追加するための1つの例をあなたに与えています

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

[〜#〜]出力[〜#〜]

2000-01-02

それがあなたの問題を解決するのに役立つことを願っています。

26
liyakat
$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
7