Calendar is an input component to select a date.
import { CalendarModule } from 'primeng/calendar';
Two-way value binding is defined using the standard ngModel directive referencing to a Date property.
<p-calendar [(ngModel)]="date" />
Calendar can also be used with reactive forms. In this case, the formControlName property is used to bind the component to a form control.
<form [formGroup]="formGroup">
<p-calendar formControlName="date" />
</form>
Default date format is mm/dd/yy which can be customized using the dateFormat property. Following options can be a part of the format.
<p-calendar
[(ngModel)]="date"
dateFormat="dd.mm.yy" />
Locale for different languages and formats is defined globally, refer to the PrimeNG Locale configuration for more information.
An additional icon is displayed next to the input field when showIcon is present.
<p-calendar
[(ngModel)]="date1"
[showIcon]="true"
[showOnFocus]="false"
inputId="buttondisplay" />
<p-calendar
[(ngModel)]="date2"
[iconDisplay]="'input'"
[showIcon]="true"
inputId="icondisplay" />
<p-calendar
[(ngModel)]="date3"
[iconDisplay]="'input'"
[showIcon]="true"
[timeOnly]="true"
inputId="templatedisplay">
<ng-template pTemplate="inputicon" let-clickCallBack="clickCallBack">
<i class="pi pi-user pointer-events-none" (click)="clickCallBack($event)"></i>
</ng-template>
</p-calendar>
Boundaries for the permitted dates that can be entered are defined with minDate and maxDate properties.
<p-calendar
[(ngModel)]="date"
[minDate]="minDate"
[maxDate]="maxDate"
[readonlyInput]="true" />
In order to choose multiple dates, set selectionMode as multiple. In this mode, the value binding should be an array.
<p-calendar
[(ngModel)]="dates"
selectionMode="multiple"
[readonlyInput]="true" />
A range of dates can be selected by defining selectionMode as range, in this case the bound value would be an array with two values where first date is the start of the range and second date is the end.
<p-calendar
[(ngModel)]="rangeDates"
selectionMode="range"
[readonlyInput]="true" />
When showButtonBar is present, today and clear buttons are displayed at the footer.
<p-calendar
[(ngModel)]="date"
[showButtonBar]="true"/>
A time picker is displayed when showTime is enabled where 12/24 hour format is configured with hourFormat property. In case, only time needs to be selected, add timeOnly to hide the date section.
<p-calendar
inputId="calendar-12h"
[(ngModel)]="datetime12h"
[showTime]="true"
[hourFormat]="12" />
<p-calendar
inputId="calendar-24h"
[(ngModel)]="datetime24h"
[showTime]="true"
[hourFormat]="24" />
<p-calendar
inputId="calendar-timeonly"
[(ngModel)]="time"
[timeOnly]="true" />
Month only picker is enabled by specifying view as month in addition to a suitable dateFormat.
<p-calendar
[(ngModel)]="date"
view="month"
dateFormat="mm/yy"
[readonlyInput]="true" />
Specifying view as year in addition to a suitable dateFormat enables the year picker.
<p-calendar
[(ngModel)]="date"
view="year"
dateFormat="yy" />
Number of months to display is configured with the numberOfMonths property.
<p-calendar
[(ngModel)]="date"
[numberOfMonths]="2" />
Custom content can be placed inside date cells with the ng-template property that takes a Date as a parameter.
<p-calendar [(ngModel)]="date">
<ng-template pTemplate="date" let-date>
<span [ngStyle]="{textDecoration: (date.day < 21 && date.day > 10) ? 'line-through' : 'inherit'}">
{{date.day}}
</span>
</ng-template>
</p-calendar>
When touchUI is enabled, overlay is displayed as optimized for touch devices.
<p-calendar
[(ngModel)]="date"
[touchUI]="true"
[readonlyInput]="true" />
Calendar is displayed as a popup by default, add inline property to customize this behavior.
<p-calendar
class="max-w-full"
[(ngModel)]="date"
[inline]="true"
[showWeek]="true" />
A floating label appears on top of the input field when focused. Visit FloatLabel documentation for more information.
<p-floatLabel>
<p-calendar
[(ngModel)]="date"
inputId="birth_date" />
<label for="birth_date">Birth Date</label>
</p-floatLabel>
Specify the variant property as filled to display the component with a higher visual emphasis than the default outlined style.
<p-calendar
[(ngModel)]="date"
variant="filled" />
Invalid state style is added using the ng-invalid and ng-dirty class to indicate a failed validation.
<p-calendar
[(ngModel)]="date"
class="ng-invalid ng-dirty" />
When disabled is present, the element cannot be edited and focused.
<p-calendar
[(ngModel)]="date"
[disabled]="true" />
Following is the list of structural style classes, for theming classes visit theming page.
Name | Element |
---|---|
p-calendar | Main container element |
p-calendar-w-btn | Main container element when button is enabled. |
p-calendar-timeonly | Main container element in time picker only mode. |
p-inputtext | Input element |
p-datepicker | Datepicker element |
p-datepicker-inline | Datepicker element in inline mode |
p-datepicker-monthpicker | Datepicker element in month view. |
p-datepicker-touch-p | Datepicker element in touch p mode. |
p-datepicker-calendar | Table containing dates of a month. |
p-datepicker-current-day | Cell of selected date. |
p-datepicker-today | Cell of today's date. |
Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. The input element has combobox role in addition to aria-autocomplete as "none", aria-haspopup as "dialog" and aria-expanded attributes. The relation between the input and the popup is created with aria-controls attribute that refers to the id of the popup.
The optional calendar button requires includes aria-haspopup, aria-expanded for states along with aria-controls to define the relation between the popup and the button. The value to read is retrieved from the chooseDate key of the aria property from the locale API. This label is also used for the aria-label of the popup as well. When there is a value selected, it is formatted and appended to the label to be able to notify users about the current value.
Popup has a dialog role along with aria-modal and aria-label. The navigation buttons at the header has an aria-label retrieved from the prevYear, nextYear, prevMonth, nextMonth,prevDecade and nextDecade keys of the locale aria API. Similarly month picker button uses the chooseMonth and year picker button uses the chooseYear keys.
Main date table uses grid role that contains th elements with col as the scope along with abbr tag resolving to the full name of the month. Each date cell has an aria-label referring to the full date value. Buttons at the footer utilize their readable labels as aria-label as well. Selected date also receives the aria-selected attribute.
Timepicker spinner buttons get their labels for aria-label from the aria locale API using the prevHour, nextHour, prevMinute, nextMinute, prevSecond, nextSecond, am and pm keys.
Calendar also includes a hidden section that is only available to screen readers with aria-live as "polite". This element is updated when the selected date changes to instruct the user about the current date selected.
<label for="date1">Date</label>
<p-calendar inputId="date1"/>
<span id="date2">Date</span>
<p-calendar ariaLabelledBy="date2"/>
<p-calendar ariaLabel="Date"/>
Key | Function |
---|---|
space | Opens popup and moves focus to the selected date, if there is none focuses on today. |
enter | Opens popup and moves focus to the selected date, if there is none focuses on today. |
Key | Function |
---|---|
escape | Closes the popup and moves focus to the input element. |
tab | Moves focus to the next focusable element within the popup. |
shift + tab | Moves focus to the previous focusable element within the popup. |
Key | Function |
---|---|
enter | Triggers the button action. |
space | Triggers the button action. |
Key | Function |
---|---|
enter | Selects the date, closes the popup and moves focus to the input element. |
space | Selects the date, closes the popup and moves focus to the input element. |
up arrow | Moves focus to the same day of the previous week. |
down arrow | Moves focus to the same day of the next week. |
right arrow | Moves focus to the next day. |
left arrow | Moves focus to the previous day. |
home | Moves focus to the first day of the current week. |
end | Moves focus to the last day of the current week. |
page up | Changes the date to previous month in date picker mode. Moves to previous year in month picker mode and previous decade in year picker. |
shift + page up | Changes the date to previous year in date picker mode. Has no effect in month or year picker |
page down | Changes the date to next month in date picker mode. Moves to next year in month picker mode and next decade in year picker. |
shift + page down | Changes the date to next year in date picker mode. Has no effect in month or year picker |
Key | Function |
---|---|
enter | Triggers the button action. |
space | Triggers the button action. |
API defines helper props, events and others for the PrimeNG Calendar module.
Calendar also known as DatePicker, is a form component to work with dates.
Defines the input properties of the component.
Defines emit that determine the behavior of the component based on a given condition or report the actions that the component takes.
name | parameters | description | |
---|---|---|---|
onFocus | event : Event | Callback to invoke on focus of input field. | |
onBlur | event : Event | Callback to invoke on blur of input field. | |
onClose | event : AnimationEvent_2 | Callback to invoke when date panel closed. | |
onSelect | value : Date | Callback to invoke on date select. | |
onClear | value : any | Callback to invoke when input field cleared. | |
onInput | value : any | Callback to invoke when input field is being typed. | |
onTodayClick | value : Date | Callback to invoke when today button is clicked. | |
onClearClick | value : any | Callback to invoke when clear button is clicked. | |
onMonthChange | event : CalendarMonthChangeEvent | Callback to invoke when a month is changed using the navigators. | |
onYearChange | event : CalendarYearChangeEvent | Callback to invoke when a year is changed using the navigators. | |
onClickOutside | value : any | Callback to invoke when clicked outside of the date panel. | |
onShow | value : any | Callback to invoke when datepicker panel is shown. |
Defines the templates used by the component.
Defines the custom events used by the component's emitters.
Custom Calendar year change event.
Custom Calendar month change event.
Defines the custom interfaces used by the module.
Locale settings options.
Month interface.
Custom Calendar responsive options metadata.
Defines the custom types used by the module.
values |
---|
"date" | "month" | "year" |
values |
---|