PHP从数据库中为每个日期打印日期数据
Posted
技术标签:
【中文标题】PHP从数据库中为每个日期打印日期数据【英文标题】:PHP Print Date data from database for each date 【发布时间】:2016-05-18 02:56:57 【问题描述】:我有一个名为Holidays
的数据库,它有一个用于保存假日日期的日期字段,称为STARTTIME
,还有一个用于保存假日天数的持续时间字段,称为DURATION
。我想从该表中收集某个月份和年份之间的所有数据,并按 1 打印日期。
例如,这是我在数据库中的数据:
STARTTIME | DURATION
2016-12-09 | 1
2016-12-15 | 5
如何以 php 1 by 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
有人知道如何创建我需要的输出吗?
【问题讨论】:
您的 for 循环中有两个<br>
标签,请尝试删除第一个。
另外,不要养成以这种方式执行查询的习惯,这是不安全的。搜索 PDO。
@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 />';
【讨论】:
更好...但是我的结果,在第 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。 没问题,我解决了这个问题...您的代码位于:$hol[1]+1 应该是 $hol[1]。我相信没有其他错误...非常感谢 我错了,把$hol[1]+1改成$hol[1]-1 完全正确...我刚刚写了... :D以上是关于PHP从数据库中为每个日期打印日期数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 R 中为日期添加时间(午夜)并在没有 1 或 2 小时班次的情况下打印它?
SQL (RedShift):从时间戳列中为每个月选择不同的日期