Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从循环中获取所有日期_Php_Datetime_Foreach_While Loop - Fatal编程技术网

Php 如何从循环中获取所有日期

Php 如何从循环中获取所有日期,php,datetime,foreach,while-loop,Php,Datetime,Foreach,While Loop,我正在准备一个节日网站。我有一个表,其中包含节日日期的datetime字段。 节日将在“2013年3月6日”和“2013年4月7日”之间举行。 所以我创建了一个循环,如下所示: Schema::create('dates',function($table) { $table->increments('id'); $table->date('date'); $table->timestamps

我正在准备一个节日网站。我有一个表,其中包含节日日期的datetime字段。 节日将在“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:我使用了替代方法,但循环结果相同:

    $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'));
}
$start_date=新日期时间('2013-03-06');
$ending_date=新日期时间('2013-04-07');
while($start_)插入日期(数组(
“日期”=>$starting\u日期
));
}
$starting_date->add(新的日期间隔('P1D'));
}

我想出了一个快速而肮脏的解决方案:

$starting_date = strtotime('2013-03-06');
$ending_date = strtotime('2013-04-06');

while($starting_date <= $ending_date)
{
    echo date('d/m/y', $starting_date) . '<br />';
    $starting_date = strtotime('1 day', $starting_date);
}

你可以简单地用你的查询替换回音。

我提出的一个非常快速而肮脏的解决方案是:

$starting_date = strtotime('2013-03-06');
$ending_date = strtotime('2013-04-06');

while($starting_date <= $ending_date)
{
    echo date('d/m/y', $starting_date) . '<br />';
    $starting_date = strtotime('1 day', $starting_date);
}
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;
您只需用查询替换回显即可。

只需将23:59:59添加到$ending_日期的末尾即可
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;
$starting_date=新日期时间('2013-03-06 00:00'); $ending_date=新的日期时间('2013-04-06 23:59:59'); $interval=新的日期间隔('P1D'); $period=new DatePeriod($starting\u date,$interval,$ending\u date); foreach($期间为$日期){ echo$date->format('Y-m-d')。“
”; } 打印(期间);退出;
哪个输出

2013-3-3-3-3-3-062013年3-3-3-3-03-062013年3-3-3-10
2013年3-3-3-10
2013-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-62013-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-102013-3-102013-3-3-3-3-3-3-3-3-3-3-3-10<3-3-102013-3-3-3-3-3-3-3-3-10<
2013-03-30
2013-03-31
2013-04-01
2013-04-02
2013-04-03
2013-04-04
2013-04-05
2013-04-06
只需在$end日期的末尾加上23:59:59即可
$starting_date=新日期时间('2013-03-06 00:00');
$ending_date=新的日期时间('2013-04-06 23:59:59');
$interval=新的日期间隔('P1D');
$period=new DatePeriod($starting\u date,$interval,$ending\u date);
foreach($期间为$日期){
echo$date->format('Y-m-d')。“
”; } 打印(期间);退出;
哪个输出


2013-3-3-3-3-3-062013年3-3-3-3-03-062013年3-3-3-10
2013年3-3-3-10
2013-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-62013-3-3-3-3-3-3-3-3-3-3-3-3-3-3-3-102013-3-102013-3-3-3-3-3-3-3-3-3-3-3-10<3-3-102013-3-3-3-3-3-3-3-3-10<
2013-03-30
2013-03-31
2013-04-01
2013-04-02
2013-04-03
2013-04-04
2013-04-05
2013-04-06
预期参数1为字符串…我收到此错误。在将时间传递给
strotime
时,不要使用
DateTime
对象。例如:
$starting\u date='2013-03-06'
使用like$starting\u date='2013-03-06',结束日期使用相同的值,然后直接进行比较,如:-while($starting_date)我怎样才能以这种格式添加一天?你试过了吗,而我应用了你的建议。strotime()预期参数1为字符串…我收到此错误。在将时间传递给
strotime
时,不要使用
DateTime
对象。例如:
$starting\u date='2013-03-06'
使用like$starting\u date='2013-03-06',结束日期使用相同的值,然后直接进行比较,如:-while($starting_date我如何才能以该格式添加一天?使用该方法仍然会给我30天的时间。根据我的示例,直到4月4日,它返回的时间超过30天,但是如果只是“插入”30天,这可能是数据库的限制。1)确保显示错误,即
ini_集('display_errors',1);错误报告(e_ALL)
然后添加
回显日期('d/m/y',$starting_date)。“
在您的数据库插入项下。我怀疑您没有看到数据库错误。使用该方法仍然给我30天的时间。直到4月4日根据我的示例,它返回的时间超过30天,但如果它只是“插入”30,这可能是您的数据库的一个限制。1)确保显示错误,即
ini\u set('display\u errors',1);error\u reporting(e\u ALL);
然后在数据库插入下添加
echo date('d/m/y',$start\u date)。“
。我怀疑您没有看到数据库错误。