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

获取使用php/mysql预订的日期,php,mysql,date,Php,Mysql,Date,我在mysql中有一个表,其中包含开始和结束日期。这些开始和结束日期用于酒店预订的时间。我需要做的是显示一个日历,其中显示当前月份的预订日期和可用日期。我如何知道当月预订了哪些天数?我可以循环查看当前月份的每一天,但这意味着需要30或31个查询,是否有更好、更优化的方法来确定该月的预定天数,以便我可以在日历上对这些天数进行颜色编码 表格结构如下: SELECT * FROM hotel_book WHERE hotelid = 1 AND DATE_FORMAT(startdate,'%Y-%m

我在mysql中有一个表,其中包含开始和结束日期。这些开始和结束日期用于酒店预订的时间。我需要做的是显示一个日历,其中显示当前月份的预订日期和可用日期。我如何知道当月预订了哪些天数?我可以循环查看当前月份的每一天,但这意味着需要30或31个查询,是否有更好、更优化的方法来确定该月的预定天数,以便我可以在日历上对这些天数进行颜色编码

表格结构如下:

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

起始日期(日期)

结束日期(日期)

查询请求:

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

SELECT*FROM hotelid=1和DATE\u格式(startdate,%Y-%m')>='2012-08'和DATE\u格式(enddate,%Y-%m')另一种方法是允许您的日历接受开始和结束日期,并在日历逻辑中呈现预订的每一天。如果日历使用javascript而不是PHP或MySQL,对服务器的影响将是最小的。无论哪种方式结束循环,都取决于您希望在何处发生循环。

因此,首先获取酒店id。然后执行查询以获取该酒店id的所有开始和结束日期。我建议您在第二个字段中计算差异:

如果有人从1号预订到3号,那么第2号也将被预订,因此您必须创建一个函数来计算差值,然后输出“中间”字段。因此,它必须首先获得开始编号,然后每次添加+1天,直到结束日期。所以它最终会变成数组(1,2,3)


然后,您可以将这些信息放入一个预定的数组中,用于jquery或ajax日历(大量在线可用)。大概一旦预订了一个日期,就不能再预订了,否则您会有重复的值1,2,3-所以我猜酒店只有一个房间可用或什么的。

以下是获取您想要的日期的代码。你可以在日历上显示它们的逻辑注意,我使用自定义类来选择数据库。

$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;

}
}
//日期范围函数如下:

    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;
函数日期\范围($first、$last、$step='+1天',$output\格式='m/d/Y'){
$dates=array();
$current=strottime($first);
$last=strottime$last;

虽然($current,这在一定程度上取决于数据库中数据的结构。由于您没有显示表,所以很难说。@hakre我更新了我的原始帖子。酒店id指的是不同的酒店,对吗?因此,您可能会让用户先选择酒店,然后使用相应的酒店id显示所有开始和结束日期在日历中玩?@Alex是的,我在查询当月的表时会有hotelid。所以首先要做的是。你能不能在问题中添加一个查询,以获取2012年8月酒店ID 1的所有日期?听起来是个好主意,然后你可以将日期输出到一个数组中,这对用户来说是最小的入侵加载时间。然后他可以使用@SXD之类的东西,那么如果我通过jquery使用一个日期选择器呢?我可以通过jquery/ajax调用获取所有开始和结束日期,然后放入一个json数组并传递给日期选择器吗?如果可以,我该怎么做?我不确定jquery日期选择器是否具有这种功能如果你只是试图阻止这样的日期您可以使用beforeShowDay事件…@SXD问题是我只有日期范围,因此为了做到这一点,我必须处理日期范围之间的所有单独日期。除非有一种简单的方法可以从代码上解决这个问题?