在 PHP 和 Mysql 的 jquery datepickers 中禁用给定范围内的日期

Posted

技术标签:

【中文标题】在 PHP 和 Mysql 的 jquery datepickers 中禁用给定范围内的日期【英文标题】:Disable Dates within given ranges in jquery datepickers from PHP and Mysql 【发布时间】:2017-09-27 12:46:14 【问题描述】:

这是我的第一篇文章,如有错误请见谅

我是 JQUERY 和 AJAX 的新手,所以请把你的答案说得很清楚

我找了好久都没有用 我正在用 php mysqlI 和 JQUERY 构建一个公寓预订系统, 我在同一页面上有 2 个 jquery datepickers,一个除了签入日期,另一个除了结账日期, 使用的 MYSQL 表称为 bookings,它有这些列 -

id、first_name、email、check_in_date、check_out_date

假设 Mysql 表返回 2 行,第一行返回 check_in_date(2017-05-02) 和 check_out_date(2017-05-10)

以及第二次返回 check_in_date(2017-06-05) 和 check_out_date(2017-06-20)

如何在两个日期选择器上禁用这两个范围内的所有日期 这是我想出来的

这是 html 表单的一部分

<div class="form-group">
<label for="check_in_date">Check In Date</label>
<input type="text" class="form-control" id="datepicker" placeholder="Check in Date">
</div>
<div class="form-group">
<label for="check_out_date">Check Out Date</label>
<input type="text" class="form-control" id="datepicker1" placeholder="Check Out Date">
</div>

这是 javascript - 不完整

$(function() 

  function checkAvailability()



$( "#datepicker" ).datepicker(
    dateFormat : 'yy-mm-dd',
    beforeShowDay: checkAvailability        
           
);

$( "#datepicker1" ).datepicker(
    dateFormat : 'yy-mm-dd',
    beforeShowDay: checkAvailability

           
);

  );

PHP文件availability.php如下

$result = mysqli_query("SELECT check_in_date, check_out_date FROM bookings");

while ($row = mysqli_fetch_assoc($result))

 $check_in_dates[] =  $row['check_in_date'];

 $check_out_dates[] =  $row['check_out_date'];  
 

提前致谢

【问题讨论】:

【参考方案1】:

我想出了解决办法

    <?php
    //below function returns all the dates within a given range
     function date_range($first, $last, $step = '+1 day', $output_format = 'Y-m-d' ) //if it was simple y example y-m-d then it will show 17 instead of 2017

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

while( $current <= $last ) 

    $dates[] = date($output_format, $current);
    $current = strtotime($step, $current);
//end of while loop

    return $dates;//returns a array
   //end of function
   //select all the  date ranges that exist in the database 
     $query = 'SELECT check_in, check_out FROM bookings';

 $result = mysqli_query($db, $query);

    $i = 0;
    while ($row=mysqli_fetch_assoc($result))
    //output all the dates within the ranges in the database
    $range[$i] = date_range($row['check_in'], $row['check_out']);//creates a associative array with numerical index values



  $i++;     


  

  $individual_dates = array();

 //converts the associative array  into a regular array
  foreach($range as $ranges)
     foreach ($ranges as $many_ranges)
       $individual_dates[] = $many_ranges;
     
  


 $json_array = json_encode($individual_dates);

 ?>

这里是javascript

<script>
            var dateToday = new Date(); //creating new date obj. used to disable dates before today used in minDate: dateToday
              $(function() 

                $( "#datepicker" ).datepicker(
                    minDate: dateToday,     
                        dateFormat : 'yy-mm-dd',
                    beforeShowDay: checkAvailability

                    );

                $( "#datepicker1" ).datepicker(
                        minDate: dateToday,
                        dateFormat : 'yy-mm-dd',
                    beforeShowDay: checkAvailability        
                    );

              )
              /******************THE json array returned by php is used here*****/
                  var $disabledDates = <?php echo $json_array; ?>

                function checkAvailability(mydate)
                var $return=true;
                var $returnclass ="available";
                $checkdate = $.datepicker.formatDate('yy-mm-dd', mydate);
                for(var i = 0; i < $disabledDates.length; i++)
                        
                       if($disabledDates[i] == $checkdate)
                          
                        $return = false;
                        $returnclass= "unavailable";
                        
                    
                return [$return,$returnclass];
                

              </script> 

【讨论】:

以上是关于在 PHP 和 Mysql 的 jquery datepickers 中禁用给定范围内的日期的主要内容,如果未能解决你的问题,请参考以下文章

使用 php、mysql 和 jQuery 实现自动完成

无法使用 Php 和 jquery ajax 在 mysql 中插入 FormData

使用 PHP 和 jQuery 进行实时聊天。在哪里存储信息? mysql还是文件?

使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据

jQuery Ajax Json 响应 - 检查是不是为空

我无法使用 PHP 和 jQuery 将表单数据更新到 MySQL