0

我正在创建一个使用 jquery ui datepicker 的站点。我有它的项目有不同的租赁长度。所以一辆车可能需要 7 天,而帐篷可能需要 3 天。

当用户输入所需的项目数量时,系统会检查天数是否可用,然后将系统中已经存在的日期数组放在一起。这个数组被传回 jquery ui datepicker 并且这些日期在日历上被屏蔽掉了。

这是我的问题。如果用户选择一个日期范围,例如 2 天。从每月 2 日到 4 日。然后用户返回并想要选择 1 日,显然如果该项目是在 2 日租用的,那么当月 1 日到 3 日的租用 ISNT 可用。

我不知道如何阻止无法提供完整租期的日子。这是我到目前为止创建阻塞日期数组的代码:

$dateArray = array();
            foreach($rentals as $rental) {

                //Figure out how many days are between the start and end...
                $now = strtotime($rental['periodEnd']);
                $your_date = strtotime($rental['periodStart']);
                $datediff = $now - $your_date;
                $daysBetween = floor($datediff/(60*60*24));

                $i = 0;

                while($i < $daysBetween) {


                    if($i != 0) {
                        $date = date('Y-m-d', strtotime($rental['periodStart']. ' + ' . $i . ' days'));
                    }else {
                        $date = date('Y-m-d', strtotime($rental['periodStart']));
                    }

                    array_push($dateArray, $date);

                    $i++;

                }

            }

            //Now get rid of duplicates...
            $dateArray = array_unique($dateArray);

            echo json_encode($dateArray);
4

1 回答 1

0

我在一个提供包租钓鱼之旅的网站上添加了这个确切的功能。我的解决方案涉及更多变量,因此这可能有点宽泛/模糊,但至少应该将您推向正确的方向。

beforeShowDay我为 Datepicker 的选项设置了一个回调函数:

函数将日期作为参数,并且必须返回一个数组,其中 [0] 等于 true/false 指示此日期是否可选,[1] 等于 CSS 类名称或默认表示为 "",并且 [ 2] 此日期的可选弹出工具提示。在显示之前,它会在日期选择器中的每一天被调用。

在我的回调中,我将用户当前的选择(他们选择的行程,可能从 1/2 到 3 天不等,以及他们选择的出发日期)与一个不可用日期列表(我使用 PHP 动态生成的和json_encode()像你自己一样)进行比较.

当用户打开 Datepicker 时,回调将在当前显示的日历上的每一天触发。所以每天都会经历一个类似的逻辑:

  1. 这一天是过去吗?(过去不能包车!)
  2. 这一天是不是已经预定了?
  3. 这个预约要多长时间?未来是否有任何预留日期与此时间范围相冲突?

请注意,在我的描述中,这都是基于前端/jQuery 的——用户输入的当前选择的值是使用$('#item').val(). 回调与后端没有交互。您可以在回调中使用 ajax,但我发现它要慢得多。你的旅费可能会改变。

此外,您绝对应该有一个后端解决方案,它也可以做几乎相同的事情。不要依赖 JS 来进行过滤。

希望这能让你走上正轨!

于 2013-03-29T00:51:17.313 回答