JavaScript カレンダー予約の重複チェック

updated Oct 14, 2021created Oct 14, 2021
js
// 予約リスト(APIから取得した想定) const reservationList = [ { startTime: new Date('2021-10-01 09:00:00'), endTime: new Date('2021-10-01 10:00:00') }, { startTime: new Date('2021-10-01 10:00:00'), endTime: new Date('2021-10-01 11:00:00') }, { startTime: new Date('2021-10-01 14:00:00'), endTime: new Date('2021-10-01 15:00:00') }, ]; /** * 予約可能かを判定して返す * 予約リストにレコードがない場合は、予約できる true * 予約リストにレコードがある場合は、予約できない false * @param {Object} params * @param {Date} params.startTime - 予約の開始時間 * @param {Date} params.endTime - 予約の終了時間 * @returns {boolean} */ function searchReservation(params) { const { startTime, endTime } = params; let canReserve = true; for (reservation of reservationList) { // 予約可能な条件の逆の場合、予約できないフラグを立てる if (!((reservation.endTime <= startTime) || (endTime <= reservation.startTime))) { canReserve = false; break; // falseになった場合、ループを終了する }; } return canReserve; }; // 実行 // 予約が埋まっていない場合、true console.log(searchReservation({ startTime: new Date('2021-10-01 11:00:00'), endTime: new Date('2021-10-01 12:00:00') })); // true // 予約が埋まっている場合、false console.log(searchReservation({ startTime: new Date('2021-10-01 09:00:00'), endTime: new Date('2021-10-01 10:00:00') })); // false