2016-05-18 46 views
0

我有一个名为Holidays的数据库,它有一个日期字段以保存节假日日期,名为STARTTIME,以及一个持续时间字段以节省多少天假期叫做DURATION。我想从一些年份和月份之间的表收集的所有数据,并通过1PHP打印每个日期的数据库中的日期数据

对于示例打印日期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

您的for循环中有两个'
'标签,请尝试删除第一个标签。 – lampwins

+0

也不要养成这样执行查询的习惯,这是不安全的。搜索PDO。 – lampwins

+0

@lampwins抱歉,它只是为了进入...问题是我的日期不计数...因为你总是可以看到它15 ...我不能使用PDO,我不知道为什么如果我使用ms.access我不能使用PDO ...并且这个应用只用于一个人,所以我没有真正考虑过安全... –

回答

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 />'; 
    } 
} 
+0

它更好...但是我的结果,在第9天,它也算数......所以结果如下:2015-12-09,2015-12-10,2015-12-11,2015-12-15,2015-12-16,2015-12-17,2015- 12-18,2015-12-19,2015-12-20。 –

+0

没问题,我解决了这个问题...你的代码在:$ hol [1] +1应该是$ hol [1]。我相信没有其他错误...非常感谢你 –

+0

我的错误,改变$ hol [1] +1到$ hol [1] -1 – Daniel