Home

Awesome

npm Build Status

A responsive date range picker for Vue.js that displays the number of nights selected and allow several useful options like custom check-in/check-out rules, localization support and more.

demo gif

Demo

https://ZestfulNation.github.io/vue-hotel-datepicker/

Installation

NPM

npm install vue-hotel-datepicker

PNPM

pnpm install vue-hotel-datepicker

YARN

yarn add vue-hotel-datepicker
import HotelDatePicker from 'vue-hotel-datepicker'
import 'vue-hotel-datepicker/dist/vueHotelDatepicker.css';

export default {
  components: {
    HotelDatePicker,
  },
}
<HotelDatePicker />

Props/Options

NameTypeDefaultDescription
alwaysVisibleBooleanfalseIf true shows display calendar in the page without an input.
bookingsArray[]If you want to show bookings.
closeDatepickerOnClickOutsideBooleantrueCloses the date picker when the user clicks outside the date picker.
disableCheckoutOnCheckinBooleanfalseIf set to true, disable checkout on the same date has checkin.
disabledDatesArray[]An array of strings in this format: YYYY-MM-DD. All the dates passed to the list will be disabled.
disabledDaysOfWeekArray[]DEPRECATED: An array of strings in this format: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']. All the days passed to the list will be disabled. It depends on the translated names.
disabledWeekDaysObject{}An object with the following properties: sunday, monday, tuesday, wednesday, thursday, friday, saturday, the value indicates if that day is disabled (true) or enabled (false).
displayClearButtonBooleantrueIf set to true, displays a clear button on the right side of the input if there are dates set.
enableCheckoutBooleanfalseIf true, allows the checkout on a disabled date.
endDate[Date, String, Number]InfinityThe end view date. All the dates after this date will be disabled.
endingDateValueDatenullThe initial value of the end date.
firstDayOfWeekNumber0The first day of the week. Where Sun = 0, Mon = 1, ... Sat = 6. You need to set the right order in i18n.day-names too.
formatString'YYYY-MM-DD'The date format string.
gridStyleBooleantrueIf false hides the grid around the days.
halfDayBooleantrueAllows to have half a day, if you have check in at noon and checkout before noon
hoveringTooltip[Boolean, Function]trueShows a tooltip with the number of nights when hovering a date.
i18nObjectsee belowHolds the traslation of the date picker.
lastDateAvailable[Number, Date]InfinityAllows to stop calendar pagination after the month of that date
maxNightsNumbernullMaximum nights required to select a range of dates. 0 or null for no limit.
minNightsNumber1Minimum nights required to select a range of dates.
periodDatesArray[]If you want to have specific startAt and endAt period with different duration or price or type of period. See below for more information
positionRightBooleanfalseIf true shows the calendar on the right of the input.
priceDecimalsNumber0The price decimals for weekly periods (see periodDates).
priceSymbolString''The price symbol added before the price when showPrice is true and a price has been set in one of the periodDates array items (period).
showPriceBooleanfalseIf set to true, displays a price contains on your periodDates.
showSingleMonthBooleanfalseIf set to true, display one month only.
showWeekNumbersBooleanfalseIf set to true, displays the week numbers.
showYearBooleantrueShows the year next to the month.
singleDaySelectionBooleanfalseWhen true only one day can be selected instead of a range.
startDate[Date, String]new Date()The start view date. All the dates before this date will be disabled.
startingDateValueDatenullThe initial value of the start date.
tooltipMessageStringnullIf provided, it will override the default tooltip "X nights" with the text provided. You can use HTML in the string.
valueBooleanfalseThe v-model prop, controls the visibility of the date picker.
yearBeforeMonthBooleanfalseShow the year before the month, only when showYear is true.

i18n Defaults:

i18n: {
  "night": "Night",
  "nights": "Nights",
  "week": "week",
  "weeks": "weeks",
  "day-names": ["Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat"],
  "check-in": "Check-in",
  "check-out": "Check-out",
  "month-names": [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December",
  ],
  "tooltip": {
      "halfDayCheckIn": "Available CheckIn",
      "halfDayCheckOut": "Available CheckOut",
      "saturdayToSaturday": "Only Saturday to Saturday",
      "sundayToSunday": "Only Sunday to Sunday",
      "minimumRequiredPeriod": "%{minNightInPeriod} %{night} minimum.",
  },
}

periodDates

KeyTypeDescription
endAtStringYYYY-MM-DD
startAtStringYYYY-MM-DD
minimumDurationNumberMinimum stay (Type: weekly => per_week | Type: nightly => per night)
periodTypeStringnightly, weekly_by_saturday, weekly_by_sunday
priceFloatPrice displayed on each day for this period

Example:

periodDates: [
  {
    startAt: "2020-06-09",
    endAt: "2020-07-26",
    minimumDuration: 4,
    periodType: "nightly"
  },
  {
    startAt: "2020-07-26",
    endAt: "2020-09-30",
    minimumDuration: 1,
    periodType: "weekly_by_saturday"
  },
  {
    startAt: "2020-09-30",
    endAt: "2020-11-30",
    minimumDuration: 2,
    periodType: "weekly_by_sunday",
    price: 4000.0
  }
],

MinimumDuration with a periodType weekly-~ equals to a week

bookings

If you want to show bookings

KeyTypeDescription
checkInDateString'YYYY-MM-DD'
checkOutDateString'YYYY-MM-DD'
styleObjectStyle, (see the example)

Example:

bookings: [
  {
    event: true,
    checkInDate: "2020-08-26",
    checkOutDate: "2020-08-29",
    style: {
      backgroundColor: "#399694"
    }
  },
  {
    event: false,
    checkInDate: "2020-07-01",
    checkOutDate: "2020-07-08",
    style: {
      backgroundColor: "#9DC1C9"
    }
  }
],

Methods

⚠️ In order to open/close the datepicker from an external element, such as a button make sure to set closeDatepickerOnClickOutside to false

NameDescription
hideDatepickerHides the datepicker
showDatepickerShows the datepicker
toggleDatepickerToggles (shows or hides) the datepicker

Events

NameParams enumDescription
booking-clickedMouseEvent, Date, ObjectEmitted every time a booking is clicked. The first param is the mouse javascript event, the second is the clicked Date and the third is the clicked booking.
check-in-changedEmitted every time a new check in date is selected with the new date as payload.
check-out-changedEmitted every time a new check out date is selected with the new date as payload.
clear-selectionEmitted every time you clicked on clear Date button.
day-clickedDate, String, Date|Number|StringEmitted every time when day is clicked. The params are clicked: date, format and next disabled date.
<span style="white-space: pre;">handle-checkin-checkout-half-day</span>ObjectEmitted on [beforeMount, clear-selection, checkout]. Param: Object of checkin-checkout date.
next-month-renderedEmitted every time the next month is rendered.
period-selectedEvent, Date, DateEmitted every time when a checkOut is clicked. Params: Mouse Event, checkIn, checkOut

booking-clicked examples

{
  checkInDate: "YYYY-MM-DD",
  checkOutDate: "YYYY-MM-DD",
  style: {
    backgroundColor: "#399694",
  }
}

Credits

This component was originally built as a Vue wrapper component for the Hotel Datepicker by @benitolopez. Version 2.0.0 was completely rewritten with Vue, removing the original library, removing some features and introducing others.