Highly customizable Angular range picker for date & time
Responsive range picker for flight, accommodation and resource booking Angular and Ionic Angular
The range picker supports start & end selection for date, time and combined date & time. Choose between a calendar view with one or more months, week view with single or multiple weeks or date and time scrollers and dropdowns.
Easily switch between single and range select for use-cases like one-way flights.
The capabilities like built-in validation, minimum, maximum values, disabled dates, range length are supported by both the scroller and calendar.
As part of Date, time & calendar it can be picked up with the Framework and Complete licenses or with the component license.
Range - Mobile & Desktop usage
Use the range picker for both mobile and desktop or set it up responsively.
The main difference between the two rendering modes is how the picker is laid out. Set the touchUi
option to false
and the component shows up suitable for larger screens and pointer interaction while setting it to true
renders it suitable for touch screens.
Use it on an existing form field, custom input, ion-input
or use it on Mobiscroll form fields. You can also embed it directly into your page.
When linked to an input, the component will be shown on focus or when someone clicks on the field. Alternatively, you can leave the input editable and show the component only on a button click.
Range - Initializing the picker
The range component generates a Mobiscroll input that inherits the theme and overall styling rules. It can however be overridden by setting the relevant options for the component.
There are four ways to use the range picker:
- Use it on an existing input as a directive. A great example is usage with an
ion-input
- Let the component generate the Mobiscroll input. Give it the extra styling and overrides through options
- Use it with two separate inputs of any type, one for
start
and another forend
- Embed the picker without an input. This can be the page itself or a more complex popup
Range - Responsive behavior
The range picker has a liquid layout, which means it nicely adapts to its surroundings. There are times however when you would like to set up the component responsively.
Use the responsive
option to configure the picker and change the options based on the viewport width. There are five predefined breakpoints:
xsmall
- min-width: 0pxsmall
- min-width: 576pxmedium
- min-width: 768pxlarge
- min-width: 992pxxlarge
- min-width: 1200px- use
custom
for setting a custombreakpoint
It is a good idea to change the display
or controls
option to tailor the UX. This way you can have a single month calendar on mobile and a two month view on bigger screens.
Range - Understanding the controls
The picker supports multiple controls:
- Calendar view - can be used on its own or combined with a time scroller
- Date picker - can be used separately or together with a time picker as a scroller on mobile and as a dropdown on desktop
- Time picker - can be used separately or together with a date picker or calendar
- Datetime picker - can be used as a scroller on mobile and as a dropdown on desktop
Use the controls
option (expecting an array) to configure the picker.
Range - Understanding display modes
The range has five built-in display modes that can be controlled through the display
option:
top
- modal that slides down from the topbottom
- modal that slides up from the bottomcenter
- modal that shows up in the middle with a pop animationanchored
- modal that shows up anchored to an input or any dom elementinline
- embeddable picker that is rendered into the markup without its own modal
Use the touchUi
option to switch between touch optimized mobile rendering and pointer optimized desktop rendering. It can be dynamically switched with the help of the responsive
option.
The defaults change on a theme to theme basis. The ios
theme comes with bottom
on mobile and anchored
on desktop while the material
and windows
themes have center
on mobile and anchored
on desktop.
Range - Date filtering with presets
When building a date filtering UI a date range picker is essential. On top of being able to select custom start and end dates presets can be very helpful and provide a nice productivity boost. A more advanced filtering experience can be created in a couple of steps:
- Custom popup with an inline calendar - Create a custom popup and place an inline date picker with start/end selection
- Select with common presets - Populate a dropdown with values like Today, Yesterday, Last week, Last month, Last 7 days, Last 30 days
- Inputs for typing dates - Adding two inputs next to the range picker enables users to type in a date rather than solely relying on manual selection
- Make it fully responsive - Use the
responsive
api to customize the desktop experience - dropdown with inputs for typing - and the mobile experience - touch optimized interface
Range - Flight booking
For a great booking experience a good date picker is essential. The best implementations are contextual and take the intent (what people want to do) and context (where and how are they doing it) into account. Learn how to use and customize the range picker and see how you can add your flavor that matches with the overall experience of your application.
Range - Vacation property availability
Use the multiple month view of the date picker for building an availability calendar for a vacation rental. The colored backgrounds and labels can be used to display season and pricing information and half-day styling to show check-in and check-out dates.
Booked dates are disabled and validation on check-in and check-out dates is automatic based on the data as a range for a new booking is applied.
Range - New event creation
Use the range picker for a new event creation. Let people pick start and end dates when adding events.
Dynamically switch between date only and date-time entry based on an "all-day" switch by changing the controls
to 'date'
or 'datetime'
.
Range - Date range
Set up the range picker for date pair selection. Regardless if you are interested in the start/end date or the actual range, you have several possibilities of rendering a date range picker. The controls
option supports different values:
calendar
- will render a calendar view for date range selectiondate
- will render a date scroller or dropdown for date range selectiondatetime
- will render a compact date scroller or dropdown with time picker for date & time range selection (explore date & time ranges)time
- will render a time picker for range selection (explore time ranges)timegrid
- will render a time grid for range selection (explore time ranges)
Range - Time range
Set up the range picker for time pair selection. Regardless if you are interested in the start/end date or the actual range, you have several possibilities of rendering a time range picker. The controls
option supports different values:
time
- will render a time picker or dropdown for range selectiontimegrid
- will render a time grid for range selectioncalendar
- will render a calendar view for date range selection (explore date ranges)date
- will render a date scroller or dropdown for date range selection (explore date ranges)datetime
- will render a compact date scroller or dropdown with time picker for date & time range selection (explore date & time ranges)
Range - Date & time range
Set up the range picker for date & time pair selection. Regardless if you are interested in the start/end date or the actual range, you have several possibilities of rendering a date and time range picker. The controls
option supports different values:
datetime
- will render a compact date scroller or dropdown with time picker for date & time range selectioncalendar
- will render a calendar view for date range selection (explore date ranges)date
- will render a date scroller or dropdown for date range selection (explore date ranges)time
- will render a time picker for range selection (explore time ranges)timegrid
- will render a time grid for range selection (explore time range selection)
Range - Customizing the calendar
The calendar view can be customized with a couple of different parameters:
- Month or week calendar - switch between
month
andweek
through thecalendarType
option and set the number of months or weeks through thepages
andcalendarSize
options - Set a month change direction - specify
'hoizontal'
or'vertical'
in thecalendarScroll
option - Show week numbers - set the
showWeekNumbers
to true and show a week counter starting from the first week of every year - Hide the outer days of a month - set the
showOuterDays
to false in case you don't want to see days from previous and next months
Range - Customizing the range
Whether you are using the calendar or scroller for range selection, the microcopy for rangeStartLabel
and rangeEndLabel
can be easily overridden. For flight booking "Outbound" and "Return" makes sense while for accommodation booking "Check in" and "Check out" might be more appropriate.
The range start/end labels can also be hidden in some cases if needed. Use the showRangeLabels
option for that.
Furthermore, you have the option to toggle the range highlight with the rangeHighlight
option, if needed.
Range - Marked, colored & labels
You can highlight days, mark them with colored dots, add labels or completely color the background of the days using the marked
, colors
and labels
options.
This offers means to add more information to the calendar that could be valuable to users. While you can use the colors
along with marked
and labels
, the latter two are mutually exclusive because they get rendered in the same place on the UI.
You can add them as exact dates
, ranges
or specify recurring rules
. The recurring
object supports different ways to describe the rules.
The passed date-times can also contain timezone data which requires a timezonePlugin
to be interpreted correctly.
Check out how timezones work in the range.
Use the onPageLoading
lifecycle event to load the data runtime. You can learn about lifecycle events and places where to drop logic to customize the experience.
Range - Presets
The selected range can be adjusted by the user or you can programmatically set the start
and end
.
This is especially useful and effective when using the range for filtering and you'd like to offer predefined ranges like Yesterday, Today, Last week and so on. Setting the values can be done from something as simple as a button click.
Range - Date types
The range works with different date types:
- JS date object - a common way of passing a date is through a Date object:
new Date(1995, 11, 17, 15, 24)
(make sure to not simply pass a date string tonew Date()
) - ISO date string - standardized way of passing dates:
'2008-09-15T15:53:00'
(make sure to pass it as a string) - Moment.js object - a great solution that solves common date management difficulties:
moment([2018, 3, 27, 12, 15])
(make sure to have moment.js loaded)
When passing dates to the component - eg. invalids, min/max - you can do it in either format and the picker will automatically know what to do with it. If you want to specify how the picker should return values, you can do it in the returnFormat
option.
Range - Formatting values
Use the dateFormat
, timeFormat
options to customize how the values show up in the inputs after selection. If the formats are not explicitly set, they are inherited from the localization settings.
Besides customizing the date and time formats you can reorder the time picker wheels and change its formats with the timeWheels
options.
Range - Timezones
The range works with local times by default, but ships with support for changing the timezone. The conversions and correct output relies on either of the two external libraries: luxon or moment-timezone. For installing and using these libraries check out this guide.
There are two angles regarding timezones:
dataTimezone
- the range expects this format and returns this format. It is'local'
by default if the date-times don't contain any timezone informationdisplayTimezone
- the calendar displays everything in this timezone. The date-times will be converted from thedataTimezone
and displayed accordingly. It is'local'
by default
Invalids as well as marked, colored and labels date-times will all be interpreted in dataTimezone
when they contain no timezone info and will be shown in displayTimezone
on the calendar.
Range - Setting the allowed range length
Besides invalidating selection that is before and after a specific date, the minimum and maximum allowed length of a range selection can be enforced through the minRange
and maxRange
options.
This form of validation is easy to understand and reduces erroneous entries.
Range - Min & max values
Configuring minimum and maximum selectable values is great for reducing mistakes. Help people by limiting the selections for the task at hand. Use the min
and max
options to restrict the selection.
Setting the values will disable dates/times earlier than min
and dates/times that come after max
.
By default these options are empty and the date picker supports infinite navigation, while the time picker has all 24 hours/60 minutes/... available for selection. Values can be passed as JS date objects, ISO date strings or Moment.js objects.
Range - Disabled values
Enforcing validation is essential to a great UX. First make sure to have the min & max values right and then work your way through disabled values.
Depending on your situation, you have two options:
- Set invalid - set the invalids through the
invalid
option. - Set valid - set the valids through the
valid
option.
invalid
and valid
options support the following:
- Exact dates - Passing exact values like:
'2020-05-20'
will disable/enable the specific day - Date ranges - Passing
start
andend
value pairs will disable/enable specific days that fall into that range - Recurring dates - Passing recurrence rules as objects or in RRULE string format will be parsed. For more information on recurrence check out the rule generator
Exact dates and the start/end pairs can be passed as JS date objects, ISO date strings or Moment.js objects. Having invalids set up correctly not just enhances the UX, but improves performance.
The passed date-times can also contain timezone data which requires a timezonePlugin
to be interpreted correctly.
Range - Recurring values
Disable recurring days, set marked or colored days with the help of the recurring
object. Learn how to configure daily
, weekly
, monthly
and yearly
recurring dates and pass a rule in the recurring
property under the invalid
, marked
, colors
or labels
options. Exceptions for specific and recurring days can be configured.
Use the configurator to experiment, build strings and objects that you can grab and use.
Range - Theming capabilities
The look and feel of the date picker can be deeply customized. There are four levels of customization:
- Base themes: Choose between iOS, Material and Windows.
- Light or dark: Every theme has a
light
anddark
variant. Setting thethemeVariant
to'auto'
will switch based on system settings. - Custom themes: Use the theme builder to customize the colors and make it match your brand.
- Custom CSS: If you need further customization, the sky is the limit with CSS overrides.
You can also see how every example looks by changing the theme from the header.
Range - Marked day classes
The default shape of day marks are dots. If you want to mark a day for something you can add one or more colored dots through the marked
option. There are cases when you might want to change the shape of the marks or use different marks that carry specific meaning.
When you want to update the shape you can simply use CSS and override the styling: .mbsc-calendar-marks .mbsc-calendar-mark { // you custom override }
.
If you need to show different shapes, you can pass a custom CSS class in the markCssClass
property of the marked
option. Use it to show triangles, squares and dots for different marks.
Range - Half days
In situations when you need to style the days a little differently you'll get built-in tools for setting background color, highlight color, add day marks or labels.
But sometimes that is not enough. Luckily you can use the cellCssClass
property of the colors
option to pass a CSS class that will be added to the day cell and apply any custom styling you write in CSS. These days can be recurring days, ranges or individual days.
You can use the cellCssClass
in combination with custom cell background
to highlight a range of days and show the ends as check-in and check-out days.
Range - Lifecycle events
The date picker ships with different event hooks for deep customization. Events are triggered through the lifecycle of the component where you can tie in custom functionality and code.
While users interact with the UI events like
onChange
, onSet
, onInit
... will be triggered.
Range - Calendar systems
The date picker supports multiple calendar systems. You can control it with the calendarSystem
setting, and it supports the following options:
- Gregorian - it is included by default
- Jalali - it is the default system of the Persian calendar and is included within the Farsi language pack
- Hijri - it is included in the Arabic language pack
Range - Localization
All components are fully localized. In case of the date picker this covers date and time format, button copy, rtl and more. You can see how each example shows up by clicking on the small flag icon or checking the examples below.
Range - RTL mode
RTL support is built in and can be explicitly controlled through the rtl
option. If not set, it is inherited from the locale
settings.
Looking for something you didn't see or have a sales question?
Ask us about it, we're here to help.