我正在准备一个节日网站。我有一张表,上面有节日日期的日期时间字段。艺术节将在"2013年3月6日"one_answers"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'));
}
我想出的一个非常快速且肮脏的解决方案是:
$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);
}
哪个输出:
06/03/13
07/03/13
08/03/13
09/03/13
10/03/13
11/03/13
12/03/13
13/03/13
14/03/13
15/03/13
16/03/13
17/03/13
18/03/13
19/03/13
20/03/13
21/03/13
22/03/13
23/03/13
24/03/13
25/03/13
26/03/13
27/03/13
28/03/13
29/03/13
30/03/13
31/03/13
01/04/13
02/04/13
03/04/13
04/04/13
05/04/13
06/04/13
您可以简单地用查询替换回显。
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
13年03月09
2014年03月10
2019年03月11
2016年03月12
2018年03月14
2015年03月15
2010年03月16
2017年03月17
2012年03月19
2020年03月20
2011年03月21
2008年03月22
1013年03月23
2013年3月24
10133月25
20133月26
10313-27
22013-03-28
20313-29
12013-03-30
2013-03-31
2013-04-01
2013年4月2日
-04-03
2013-04-04
2013年4月5日
2014年4月6日