0

お祭り会場を準備中です。フェスティバルの日付の日時フィールドを持つテーブルがあります。フェスティバルは「2013 年 3 月 6 日」と「2013 年 4 月 7 日」の間になります。だから私はこれらの答えのようにループを作成しました:

Schema::create('dates',function($table)
        {
            $table->increments('id');
            $table->date('date');
            $table->timestamps();
        });
        $starting_date = new DateTime('2013-03-06');
        $ending_date = new DateTime('2013-04-06');

        $interval = DateInterval::createFromDateString('1 day');
        $period = new  DatePeriod($starting_date , $interval, $ending_date);

        foreach($period as $dt)
        {

        DB::table('dates')->insert(array(
        'date' => $dt
        ));

        }

データベースは 4 月 4 日までいっぱいになり、ループは 30 日以上追加されません。不足している日数の修正を見つけるのを手伝ってもらえますか?

ps: 代わりの while ループを使用しましたが、結果は同じでした:

    $starting_date = new DateTime('2013-03-06');        
            $ending_date = new DateTime('2013-04-07');

            while($starting_date <= $ending_date){
                DB::table('dates')->insert(array(
                    'date' => $starting_date
                ));

            }
    $starting_date->add(new DateInterval('P1D'));
}
4

2 に答える 2

1
just add 23:59:59 to the end of the $ending_date
$starting_date = new DateTime('2013-03-06 00:00');
$ending_date = new DateTime('2013-04-06 23:59:59');


$interval = new DateInterval('P1D');
$period = new  DatePeriod($starting_date , $interval, $ending_date);
foreach ($period as $date) {
    echo $date->format('Y-m-d')."<br/>";
}
print_r($period);exit;

どの出力

2013-03-06
2013-03-07
2013-03-08
2013-03-09
2013-03-10
2013-03-11
2013-03-12
2013-03-13
2013-03-14
2013-03-15
2013-03-16
2013-03-17
2013-03-18
2013-03-19
2013-03-20
2013-03-21
2013-03-22
2013-03-23
2013-03-24
2013-03-25
2013-03-26
2013-03-27
2013-03-28
2013-03-29
2013-03-30
2013-03-31
2013-04-01
2013-04-02
2013-04-03
2013-04-04
2013-04-05
2013-04-06

于 2013-01-09T12:12:19.830 に答える