PHP从sql中获取一个范围内的所有日期
PHP从sql中获取一个范围内的所有日期
作为一个完全的新手和无知者,先提前道歉...\n假设我有一个SQL表格,包含三列:姓名;入职日期;离职日期。我在表格中有两条记录。\n对于每条个人记录,我想输出从“入职日期”到“离职日期”的前一天的日期。\n例如...\n表中的第一条记录是JohnDoe,2017-03-27,2017-03-30\n表中的第二条记录是JaneDoe,2017-04-10,2017-04-12\n我想输出结果:\n2017-03-27\n2017-03-28\n2017-03-29\n2017-04-10\n2017-04-11\n搜索过,但没找到完全符合要求的方法...希望有人能帮忙 🙂
问题出现的原因是使用了错误的循环语句。如果使用PDO,则可以使用正确的代码,但如果使用旧的mysql方式,则应该使用"while ($row = mysql_fetch_assoc($result))"。
解决方法是使用两个循环。第一个循环用于获取结果,第二个循环用于检查条件并输出结果。
以下是解决问题的代码示例,其中$i是计数器变量:
$i=0; while ($row = $query->fetch(PDO::FETCH_ASSOC)){ $date1=$row[$i]['datein']; $date2=$row[$i]['dateout']; // 检查入住日期是否大于离店日期 if ($date1 > $date2){ echo 'error in date entry date bigger then exit date'; // continue将跳过当前循环并进入下一行 continue; } while ($date1 != $date2){ echo $date1; $date1=date('Y-m-D',strtotime($date1 . ' + 1 day'); } $i++; }
希望这对你有所帮助。
问题出现的原因是用户想要从数据库中获取一个日期范围内的所有日期,但不知道如何实现。解决方法是使用PHP的DateTime类来实现。用户需要设置$start_date和$end_date的值为数据库中的值,然后运行代码即可。循环会自动递增日期,直到达到结束日期。
以下是示例代码:
$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-03-27 2017-03-28 2017-03-29
如果用户想要对数据库中的每条记录重复输出结果,可以将代码放在获取行的循环中,如下所示:
while (fetch rows) { /* code above */ }
感谢Qirel的快速回答!非常感谢。