【问题标题】:PHP Print Date data from database for each datePHP从数据库中为每个日期打印日期数据
【发布时间】: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 循环中有两个 &lt;br&gt; 标签,请尝试删除第一个。
  • 另外,不要养成以这种方式执行查询的习惯,这是不安全的。搜索 PDO。
  • @lampwins 抱歉,这只是为了输入...问题是我的日期不算数...因为您总是可以看到 15...我不能使用 PDO,我不不知道为什么如果我使用 ms.access 我不能使用 PDO...而且这个应用程序只用于一个人,所以我并没有真正考虑过安全...

标签: php ms-access


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
相关资源
最近更新 更多