在2个日期之间循环,每次循环添加一天

时间:2015-11-24 18:31:06

标签: php mysql

我想知道以下是否可行。我有两个约会,让我们说:

2015年11月20日和25/11/15

我有一个SQL查询,我需要在每个日期的2个日期之间搜索,从第一个日期之前的5天到最后一个日期之后的5天。我的简单陈述是:

$result = mysqli_query($con,"SELECT USER_ID, ROOM, DATE 
FROM booking_table WHERE DATE BETWEEN 'DATE1' AND 'DATE2'");
while($row = mysqli_fetch_array($result))
{
print "<tr><td>" . $row['DATE'] . "<td>" . $row['ROOM'] . "</td><td>" . $row['USER_ID'] . "</td></tr>";
}

现在我希望这循环使用以下日期替换语句中的DATE1和DATE2:

15/11/2015 AND 16/11/2015 (5 days before 1st date and the next day)
16/11/2015 AND 17/11/2015

等到最后一个日期后的5天,所以:

29/11/2015 AND 30/11/2015

所以我首先假设我需要在5天之前获得日期,然后添加一天,这将在两天之间获得前两个,然后继续每天添加一天,直到最后5天,这将是最后一天天。我不知道该怎么做。感谢您的帮助。

最终结果应如下所示:

| Date       | Room Type     | User ID
| 15/11/2015 | Double        | 3
| 15/11/2015 | Twin          | 4
| 16/11/2015 | Shared Double | 9
| 24/11/2015 | Single        | 6

等等......

2 个答案:

答案 0 :(得分:0)

您可以使用

For @Days = 0 to ?? Step 5
    ...
next

循环查询和

WHERE DATE > ('DATE1',INTERVAL @Days DAY) AND DATE < ('DATE2',INTERVAL @Days DAY)

(我不喜欢)

否则你可以使用这个技巧:

for ($date = strtotime("2014-01-01"); $date < strtotime("2014-02-01"); $date = strtotime("+1 day", $date)) {
echo date("Y-m-d", $date)."<br />";
}

答案 1 :(得分:0)

创建日期的另一个选择是使用DateTimeDateIntervalDatePeriod

首先,您可以使用示例中的日期创建create_tasks_table.php$date1:'20 / 11/2015'和'25 / 11/15'。

您可以使用DateTime类上的$date2函数来添加和减去5天。

然后创建一个modify 1天作为dateperiod的间隔。 然后创建一个$dateInterval,您可以使用$datePeriod构造进行循环。

例如:

foreach

这将使用日期回显查询:

$date1 = DateTime::createFromFormat('d/m/Y', '20/11/2015');
$date1->modify('-5 days');

$date2= DateTime::createFromFormat('d/m/y', '25/11/15');
$date2->modify('+5 days');

$dateInterval = new DateInterval('P1D');
$datePeriod = new DatePeriod(
    $date1, $dateInterval ,$date2
);

foreach ($datePeriod as $date) {
    $sql = sprintf("SELECT USER_ID, ROOM, DATE FROM booking_table WHERE DATE BETWEEN '%s' AND '%s'",
        $date->format("d/m/Y"),
        $date->modify('+1 days')->format("d/m/Y")
    );
    echo "$sql<br>";
}