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

私はこの正確な機能をチャーター釣り旅行を提供する Web サイトに追加しました。私のソリューションにはさらに多くの変数が含まれていたため、これはやや広範/曖昧かもしれませんが、少なくとも正しい方向に進むはずです.

beforeShowDayDatepicker のオプションのコールバック関数を設定しました。

関数はパラメーターとして日付を取り、[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 に答える