我有一个名为Holidays
的数据库,其中有一个日期字段用于保存名为STARTTIME
的假日日期,还有一个持续时间字段用于保存名为DURATION
的假日的天数。我希望在一个月和一年之间收集该表中的所有数据,并将日期打印为1。
例如,这是我在数据库中的数据:
STARTTIME | DURATION
2016-12-09 | 1
2016-12-15 | 5
如何在每个日期用PHP 1打印1?所以它会导致:
2016-12-09
2016-12-15
2016-12-16
2016-12-17
2016-12-18
2016-12-19
2016-12-20
我的代码现在是这样的:
//startDate and endDate is get from my filter, this is only for example
$startDate = '2016-01-01';
$endDate = '2016-01-31';
$sqlHol = "SELECT STARTTIME, DURATION FROM HOLIDAYS WHERE DATEVALUE(STARTTIME) BETWEEN DateAdd('m',-1,#$startDate#) AND #$endDate#";
$queryHol = $db->query($sqlHol);
$hols = $queryHol->fetchAll();
echo '<br />';
//testing to print out array result
print_r($hols);
//looping through data from database
foreach($hols as $hol)
{
for($i=1; $i <= $hol[1]; $i++)
{
echo '<br />';
$due = date_create($hol[0]);
echo date_format($due, 'Y-m-d');
$due = date_add(date_create($hol[0]), date_interval_create_from_date_string('1 days'));
echo '<br />';
}
}
这是我的结果(日期没有增加):
2015-12-09
2015-12-15
2015-12-15
2015-12-15
2015-12-15
2015-12-15
2015-12-15
任何人都知道如何创建我需要的输出?
答案 0 :(得分:1)
在递增之前,您似乎正在编写截止日期。尝试使用循环计数器来跟踪您增加日期的次数。
foreach($hols as $hol)
{
for($i=0; $i <= $hol[1]-1; $i++)
{
echo '<br />';
$due = date_create($hol[0]);
$due = date_add(date_create($hol[0]), date_interval_create_from_date_string(i.' days'));
echo date_format($due, 'Y-m-d');
echo '<br />';
}
}