PHP获取sql范围内的所有日期

时间:2017-03-27 03:22:17

标签: php mysql

完成新手和全新手,所以提前道歉......

假设我在SQL中有一个包含三列的表:name; datein;约会。我在表中有2条记录。

对于每个单独的记录,我想回复一下来自' datein'到前一天' dateout'。

所以例如......

数据库中的记录1是JohnDoe,2017-03-27,2017-03-30

数据库中的记录2是JaneDoe,2017-04-10,2017-04-12

我想回应结果:

2017年3月27日

2017年3月28日

2017年3月29日

2017年4月10日

2017年4月11日

搜索但无法找到能够做到这一点的事情...希望有人可以提供帮助:)

2 个答案:

答案 0 :(得分:1)

虽然可能存在纯粹的MySQL解决方案,但这里是使用DateTime类的PHP替代方案。将$start_date$end_date设置为数据库中的值,然后运行!循环会自动将日期递增1,直到您到达最终日期。

$start_date = "2017-03-27";
$end_date = "2017-03-30";

$start = new DateTime($start_date);
$end = new DateTime($end_date);

while ($start < $end) {
    echo $start->format("Y-m-d")."\n";
    $start->modify("+1 day");
}

输出:

  

2017年3月27日
  2017年3月28日
  2017-03-29

Live demo

答案 1 :(得分:1)

你只需要使用2个循环。 1获取结果另一个检查条件和回声。 第一个循环这是如果你使用PDO然后代码是正确的,否则如果你使用mysql旧方式然后它将是&#34; while($ row = mysql_fetch_assoc($ result))&#34;

$i=0;
    while ($row = $query->fetch(PDO::FETCH_ASSOC)){
        $date1=$row[$i]['datein'];
        $date2=$row[$i]['dateout'];
       // we check that entry date is not bigger then the exit day
        IF ($date1 > $date2){
            echo 'error in date entry date bigger then exit date';
            //continue will bypass the next loop and go to the next row
            continue; 
            }   
           while ($date1 != $date2){
           echo $date1;
           $date1=date('Y-m-D',strtotime($date1 . ' + 1 day);
           }
$i++;    
}

希望它可以帮到你