DateRangeField

A widget to edit a start/end date pair. The two Dates are stored in the value property.

By default, the picker displays below the fields and edits the value "live":

Date range field
//<code-header>
fiddle.title = 'Date range field';
//</code-header>
new DateRangeField({
    appendTo   : targetElement,
    autoExpand : true,
    rendition  : 'outlined',
    picker     : {
        align              : 't-b50',
        datePickerDefaults : {
            shadePastDates : true
        }
    }
});

new DateRangeField({
    appendTo   : targetElement,
    autoExpand : true,
    rendition  : 'filled',
    picker     : {
        align              : 't-b50',
        datePickerDefaults : {
            shadePastDates : true
        }
    },
    fieldStartDate : {
        placeholder : 'Departure'
    },
    fieldEndDate : {
        placeholder : 'Return'
    }
});

The confirmable config instructs the picker to display on top of the field with OK and Cancel buttons:

Confirmable date range field
//<code-header>
fiddle.title = 'Confirmable date range field';
//</code-header>
const firstDateOfMonth = DateHelper.getFirstDateOfMonth(new Date());

new DateRangeField({
    appendTo    : targetElement,
    autoExpand  : true,
    // Adds a bottom toolbar with OK and Cancel buttons
    confirmable : true,
    rendition   : 'outlined',
    value       : [DateHelper.add(firstDateOfMonth, 7, 'd'), DateHelper.add(firstDateOfMonth, 17, 'd')]
});

new DateRangeField({
    appendTo    : targetElement,
    autoExpand  : true,
    // Adds a bottom toolbar with OK and Cancel buttons
    confirmable : true,
    rendition   : 'filled',
    value       : [DateHelper.add(firstDateOfMonth, 7, 'd'), DateHelper.add(firstDateOfMonth, 17, 'd')]

});

Cells in the month calendars presented in the picker can be customized with a cellRenderer:

Date range field cell renderer
//<code-header>
fiddle.title = 'Date range field cell renderer';
CSSHelper.insertRule([
    '.date-range-field-demo .b-date-picker-cell-inner { padding:0.5em 0.75em 1em 0.75em; }',
    '.date-range-field-demo .b-date-picker-cell-payload { margin-bottom:4px; }',
    '.b-calendar-panel-cell:not(.b-active-date) .b-date-picker-cell-payload { opacity:0.65; }',
    '.b-date-picker-cell-payload { font-size: 0.6em; white-space: nowrap; }',
    '.therm { padding-inline-end : .5em;; }'
], targetElement.getRootNode());
//</code-header>

const picker = new DateRangeField({
    appendTo   : targetElement,
    autoExpand : true,
    value      : ['today', 'today'],

    picker : {
        align : {
            align : 't-b50'
        },
        cls                : 'date-range-field-demo',
        datePickerDefaults : {
            shadePastDates : true
        },
        cellRenderer : ({ innerCell, cellPayload, date }) => {
            const
                CF      = /US|LR|MM/i.test(new Intl.Locale(navigator.languages[0]).region) ? 'F' : 'C', // US/Liberia/Myanmar
                convert = (CF === 'F') ? t => t : t => Math.floor((t - 32) * 5 / 9),
                therm   = v => Math.min(4, Math.max(0, Math.floor((v - 30) / 15))),
                hiF     = date % 31 + 47,  // pseudo-random temperature
                loF     = hiF - date % 29 - 11,
                hi      = `${convert(hiF)} °${CF}`,
                lo      = `${convert(loF)} °${CF}`;

            cellPayload.innerHTML = hi;

            innerCell.dataset.btip =
                `<div><span class="therm fa fa-thermometer-${therm(hiF)}"></span>High: ${hi}</div>` +
                `<div><span class="therm fa fa-thermometer-${therm(loF)}"></span>Low: ${lo}</div>`;
        }
    },

    listeners : {
        change : ({ value }) => {
            Toast.show(`You picked ${DateHelper.format(value[0], 'MMM DD')} to ${DateHelper.format(value[1], 'MMM DD')}`);
        }
    }
});

Click on the calendars in the picker, or typing arrow keys will adjust the date range based on which of the individual date fields has the input focus.

Configs

123

Common

editablePickerField
listenersEvents

Other

Enables OK/Cancel button bar to accept date range changes. A value of true shows the OK and Cancel buttons.

See confirmable

keepTime: Boolean | Date | String= false

A flag which indicates what time should be used for selected date. false by default which means time is reset to midnight.

Possible options are:

  • false to reset time to midnight
  • true to keep original time value
  • '17:00' a string which is parsed automatically
  • new Date(2020, 0, 1, 17) a date object to copy time from
  • 'entered' to keep time value entered by user (in case format includes time info)
max: String | DateAlso a property

Max value

min: String | DateAlso a property

Min value

A config object used to configure the datePicker.

dateField = new DateRangeField({
     picker    : {
         multiSelect : true
     }
 });
weekStartDay: Number

The week start day in the picker, 0 meaning Sunday, 6 meaning Saturday. Uses localized value per default.

columnWidget
dateFieldDefaultsAbstractDateRange
dateStepTriggersAbstractDateRange
fieldEndDateAbstractDateRange
fieldStartDateAbstractDateRange
formatAbstractDateRange
nameField
renditionTextField
rtlRTL
spanWidget
valueField

Accessibility

ariaLabelWidget
keyMapKeyMap

Container

inlineField

CSS

clsWidget
colorWidget
htmlClsWidget
styleWidget
uiWidget

DOM

adoptWidget
appendToWidget
contentWidget
datasetWidget
htmlWidget
idWidget
tagWidget
titleWidget

Field

maxLengthTextField
minLengthTextField

Float & align

alignWidget
anchorWidget
centeredWidget
draggableWidget
floatingWidget
xWidget
yWidget

Input element

Label

hintField
labelLabelable
labelClsLabelable
labelPositionLabelable
labelsField
labelWidthLabelable

Layout

alignSelfWidget
dockWidget
flexWidget
heightWidget
hiddenWidget
marginWidget
maxHeightWidget
maxWidthWidget
minHeightWidget
minWidthWidget
textAlignWidget
weightWidget
widthWidget

Misc

badgeBadge
dataFieldWidget
disabledWidget
localeClassLocalizable
localizableLocalizable
maskedWidget
ownerWidget
refWidget
rippleWidget
tabWidget
tooltipWidget

Picker

autoExpandPickerField

Scrolling

Properties

95

Class hierarchy

isDateRangeField: Boolean= truereadonly
Identifies an object as an instance of DateRangeField class, or subclass thereof.
isDateRangeField: Boolean= truereadonlystatic
Identifies an object as an instance of DateRangeField class, or subclass thereof.
isAbstractDateRangeAbstractDateRange
isBadgeBadge
isDelayableDelayable
isEventsEvents
isFieldField
isFormulaFieldFormulaField
isKeyMapKeyMap
isLabelableLabelable
isLocalizableLocalizable
isPickerFieldPickerField
isTextFieldTextField
isValidatableValidatable
isWidgetWidget

Other

Enables OK/Cancel button bar to accept date range changes. A value of true shows the OK and Cancel buttons.

See confirmable

Get/set max value, which can be a Date or a string. If a string is specified, it will be converted using the specified format.

Get/set min value, which can be a Date or a string. If a string is specified, it will be converted using the specified format.

$namestaticWidget
columnWidget
fieldEndDateAbstractDateRange
fieldStartDateAbstractDateRange
formatAbstractDateRange
formulaFormulaField
inputField
isEmptyField
isValidField
renditionTextField
rtlRTL
spanWidget
typestaticWidget
valueField

Accessibility

keyMapKeyMap

CSS

clsWidget

DOM

appendToWidget
contentWidget
datasetWidget
elementWidget
htmlWidget
idWidget
styleWidget

Float & align

xWidget
yWidget

Layout

alignSelfWidget
flexWidget
heightWidget
marginWidget
maxHeightWidget
maxWidthWidget
minHeightWidget
minWidthWidget
widthWidget

Lifecycle

configBase

Misc

badgeBadge
cellInfoWidget
disabledWidget
errorTipValidatable
labelLabelable
localeHelperLocalizable
localeManagerLocalizable
refWidget
tabWidget
tooltipWidget

Picker

pickerPickerField

Visibility

hiddenWidget
isVisibleWidget

Widget hierarchy

ownerWidget
parentWidget

Functions

67

Configuration

applyDefaultsstaticBase

Events

Float & align

alignToWidget
setXYWidget
showByWidget
toFrontWidget

Lifecycle

createstaticWidget
destroystaticBase
initClassstaticWidget

Misc

attachTooltipstaticWidget
fromElementstaticWidget
fromSelectorstaticWidget
getByIdstaticWidget
isOfTypeNamestaticBase
mixinstaticBase
optionalLstaticLocalizable

Other

clearField
clearErrorValidatable
composeWidget
createOnFrameDelayable
disableWidget
enableWidget
focusWidget
getErrorsValidatable
LstaticLocalizable
maskWidget
onEvents
recomposeWidget
relayAllEvents
selectField
setErrorValidatable
triggerEvents
unEvents
unmaskWidget

Picker

hidePickerPickerField
showPickerPickerField
togglePickerPickerField

Visibility

hideWidget
showWidget

Widget hierarchy

closestWidget
containsWidget
eachWidgetPickerField
ownsWidget
queryWidget
queryAllWidget
upWidget

Events

19
actionField
catchAllEvents
changeField
clearField
destroyEvents
focusInWidget
focusOutWidget
hideWidget
inputField
paintWidget
readOnlyWidget
recomposeWidget
resizeWidget
showWidget
triggerField

Event handlers

19

Typedefs

7

CSS variables

125
NameDescription
--b-date-range-field-gapGap between the start and end date fields