获取使用php / mysql预订的日期

时间:2012-08-05 15:34:36

标签: php mysql date

我在mysql中有一个表,它包含一个开始和结束日期。这些开始和结束日期适用于预订酒店的情况。我需要做的是显示一个日历,显示预订的日期和当月可用的日期。我怎样才能知道当月预订的天数?我可以循环浏览当月的每一天,但这意味着30或31个查询,是否有更好,更优化的方式来查找本月预订的天数,以便我可以在日历上对日期进行颜色编码?

表结构如下:

  

hotelid int(11)

     

startdate(日期)

     

enddate(date)

查询请求:

SELECT * FROM hotel_book WHERE hotelid = 1 AND DATE_FORMAT(startdate,'%Y-%m') >= '2012-08' AND DATE_FORMAT(enddate,'%Y-%m') <= '2012-08'

我确定我可以通过它2012-08-01和2012-08-31所以我不在每张支票上处理日期格式。但仅仅是出于示例目的。

3 个答案:

答案 0 :(得分:2)

另一种方法是允许您的日历接受开始日期和结束日期,并呈现在日历逻辑中预订的每一天。如果日历使用javascript而不是PHP或MySQL对您的服务器的影响将是最小的。无论哪种方式,你最终都会循环,它只取决于你想要发生的地方。

答案 1 :(得分:0)

首先获取酒店身份证。然后执行查询以获取与该酒店ID相对应的所有开始日期和结束日期。我建议你有第二个字段来计算差异:

如果有人预订了第1到第3,那么第2个也会被预订,所以你必须创建一个计算差异的函数,然后输出'在'之间'字段。所以它必须首先得到起始编号,然后每次增加+1天直到结束日期。所以它最终会像数组(1,2,3)

然后你可以把这个信息放到一个预订的数组中,用于jquery或ajax日历(很多在线提供)。据推测,一旦约会日期,就不能再次预订,否则你会有1,2,3的重复值 - 所以我猜这家酒店只有一个房间可用或其他什么。

答案 2 :(得分:0)

以下是获取所需日期的代码。您可以在日历上显示有关其逻辑的信息。 请注意,我使用自定义类进行数据库选择。

$id=$_POST['id'];
$days=$db->select("reservations","room_id=".$id);
$listofdays=array();
foreach ($days $day) {
$start=$day['start'];
$end=$day['end'];
$liste=array(); //This array will be filled with dates between start and end
$liste=date_range($start, $end, $step = '+1 day', $output_format = 'm-d-Y'     );
foreach ($liste as $key => $list) {
$listofdays[] = $list;

}
}

// date_range函数如下:

    function date_range($first, $last, $step = '+1 day', $output_format = 'm/d/Y' ) {

$dates = array();
$current = strtotime($first);
$last = strtotime($last);

while( $current <= $last ) {

    $dates[] = date($output_format, $current);
    $current = strtotime($step, $current);
}

return $dates;

};