使用数据库表的选择语句禁用日期选择器中的天数

Posted

技术标签:

【中文标题】使用数据库表的选择语句禁用日期选择器中的天数【英文标题】:Disable days in a datepicker using select statement to database table 【发布时间】:2017-05-01 18:42:25 【问题描述】:

第一个代码用于从我的表reservas...中获取两个日期之间的日期...

<?php
include "controlreservas/conexion.php";
$sql1="select llegada, salida from reservas";
$query = $con->query($sql1);
$r=$query->fetch_array();
$begin = new DateTime( $r["llegada"] );
$end = new DateTime( $r["salida"] );
$end = $end->modify( '+1 day' ); 
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);
?>
<?php foreach ($daterange as $date) : ?>
<?php echo $date->format("Y-m-d"); ?>

这是它的工作:

2016-12-20
2016-12-21
2016-12-22
2016-12-23
2016-12-24

现在下一个代码是在我的 datepicker 中禁用这个日期(所有这些日期,只能从 select 中获取):

<script>
$(function() 
var disabledDays = ["<?php echo $date->format("Y-m-d"); ?>"];
var date = new Date();
jQuery(document).ready(function()  
    $( "#datepicker1").datepicker( 
        dateFormat: 'Y-m-d',
        beforeShowDay: function(date) 
            var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
            for (i = 0; i < disabledDays.length; i++) 
                if($.inArray(y + '-' + (m+1) + '-' + d,disabledDays) != -1) 
                    //return [false];
                    return [true, 'ui-state-active', ''];
                
            
            return [true];

        
    );
);
    );
</script>

结果只是禁用了第一个日期,而不是所有日期:

感谢您的宝贵时间

【问题讨论】:

【参考方案1】:

变量 disabledDates(在 javascript 中)应该是 stringsArray,其中每个字符串代表您要禁用的日期。

您可以做的是从您在 php 中拥有的 $daterange 变量创建该列表:

$dates_ar = [];
foreach ($daterange as $date) 
    $dates_ar[] = $date->format("Y-m-d");

$disabled_dates = '"' . implode('", "', $dates_ar) .'"';

然后在您的javascript 代码中,您可以使用$disabled_dates 变量(这是一个包含您需要的值的字符串:

$(function() 
    var disabledDays = [<?php echo $disabled_dates; ?>];

【讨论】:

谢谢!有了这个,它就可以工作了:D:D(在 $dates_ar[] = date->format("Y-m-d") 部分;我把 $ 放在 date ..$date 和 ok 之前)。 不确定我是否关注...什么? 你好..对不起,但你知道什么时候:$sql1="select llegada, salida from reservas where id_habitacion='$id_habitacion'"; ?我把它放了,但它只显示第一个注册表,例如,reservas 在同一个 id_habitacion 中有 2 个 reservas,而 datepicker 只显示第一个,你知道如何解决这个问题吗? 您应该获取所有值并将它们全部置于禁用状态(不仅仅是第一个)。 是的..此代码不是用于获取吗? $query = $con->query($sql1); $r=$query->fetch_array(); $begin = new DateTime($r["llegada"]); $end = new DateTime($r["salida"]); ,我不知道什么是坏的

以上是关于使用数据库表的选择语句禁用日期选择器中的天数的主要内容,如果未能解决你的问题,请参考以下文章

在引导日期时间选择器中禁用时间

在日期时间选择器中禁用时间选择器

在引导日期选择器中禁用过去的日期

Angular 2 在日期选择器中禁用特定日期

如何在蚂蚁设计日期选择器中禁用所有星期日和特定日期数组

如何计算通过Android中的日期选择器选择的两个日期之间的天数