
Angular Date Picker Component
Create consistent cross-browser and cross-device Angular date picker.
Examples
<c-row>
<c-col lg="4">
<c-date-picker closeOnSelect />
</c-col>
<c-col lg="4">
<c-date-picker [date]="date" [showAdjacentDays]="false"/>
</c-col>
</c-row>
import { Component } from '@angular/core';
import { ColComponent, DatePickerComponent, RowComponent } from '@coreui/angular';
@Component({
selector: 'docs-date-picker01',
templateUrl: './date-picker01.component.html',
standalone: true,
imports: [RowComponent, ColComponent, DatePickerComponent]
})
export class DatePicker01Component {
public date = new Date();
}
With footer
<c-row>
<c-col lg="4">
<c-date-picker
[(date)]="date"
#datePicker="cDatePicker"
[calendarDate]="calendarDate"
>
<ng-template cTemplateId="datePickerFooter" let-dropdown>
<button cButton color="danger" variant="ghost" size="sm" (click)="onToday();" class="me-auto">Today</button>
<button cButton color="primary" size="sm" (click)="onCancel()" cDropdownClose [dropdownComponent]="dropdown">Cancel</button>
<button cButton color="primary" size="sm" [disabled]="!date" cDropdownClose [dropdownComponent]="dropdown">OK
</button>
</ng-template>
</c-date-picker>
</c-col>
<c-col class="d-flex align-items-center">
{{date | date}}
</c-col>
</c-row>
import { Component } from '@angular/core';
import { DatePipe } from '@angular/common';
import {
ButtonDirective,
ColComponent,
DatePickerComponent,
DropdownCloseDirective,
RowComponent,
TemplateIdDirective
} from '@coreui/angular';
@Component({
selector: 'docs-date-picker02',
templateUrl: './date-picker02.component.html',
standalone: true,
imports: [
RowComponent,
ColComponent,
DatePickerComponent,
TemplateIdDirective,
ButtonDirective,
DropdownCloseDirective,
DatePipe
]
})
export class DatePicker02Component {
public date?: Date | null = new Date();
public calendarDate = new Date(Date.now());
onToday() {
this.calendarDate = new Date(Date.now());
}
onCancel() {
this.date = null;
}
}
Sizing
Set heights using size
property like size="lg"
and size="sm"
.
<c-row class="mb-4">
<c-col lg="5">
<c-date-picker size="lg" />
</c-col>
</c-row>
<c-row>
<c-col lg="4">
<c-date-picker size="sm" />
</c-col>
</c-row>
Disabled
Add the disabled
boolean attribute on an input to give it a grayed out appearance and remove pointer events.
<c-row>
<c-col lg="4">
<c-date-picker disabled />
</c-col>
</c-row>
Readonly
Add the inputReadOnly
boolean attribute to prevent modification of the input value.
<c-row>
<c-col lg="4">
<c-date-picker inputReadOnly />
</c-col>
</c-row>
Format
Control the format of the date displayed in the input using the format
property according to locale
rules.
Makes the date input read-only.
<c-row>
<c-col lg="4">
<c-date-picker locale="es" format="dd MMMM yyy" closeOnSelect />
</c-col>
</c-row>
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { registerLocaleData } from '@angular/common';
import localeEs from '@angular/common/locales/es';
import { ColComponent, DatePickerComponent, RowComponent } from '@coreui/angular';
registerLocaleData(localeEs); // es-ES
@Component({
selector: 'docs-date-picker15',
templateUrl: './date-picker15.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true,
imports: [RowComponent, ColComponent, DatePickerComponent]
})
export class DatePicker15Component {}
Disabled dates
Add dates user cannot select using the disabledDates
property.
<c-row>
<c-col lg="4">
<c-date-picker
[calendarDate]="calendarDate"
[disabledDates]="disabledDates"
locale="de-AT"
[maxDate]="maxDate"
[minDate]="minDate"
[dateFilter]="dateFilter"
/>
</c-col>
</c-row>
import { Component } from '@angular/core';
import { ColComponent, DatePickerComponent, RowComponent } from '@coreui/angular';
@Component({
selector: 'docs-date-picker06',
templateUrl: './date-picker06.component.html',
standalone: true,
imports: [RowComponent, ColComponent, DatePickerComponent]
})
export class DatePicker06Component {
public calendarDate = new Date(2022, 2, 1);
public disabledDates = [
[new Date(2022, 2, 4), new Date(2022, 2, 7)], // range of dates that cannot be selected
new Date(2022, 2, 16), // single date that cannot be selected
new Date(2022, 3, 16),
[new Date(2022, 4, 2), new Date(2022, 4, 8)]
];
public maxDate = new Date(2022, 5, 0);
public minDate = new Date(2022, 0, 1);
dateFilter = (date: Date | null): boolean => {
const day = date?.getDay();
return day !== 0;
};
}
Non-english locale
Auto
<c-row>
<c-col lg="4">
<c-date-picker />
</c-col>
</c-row>
Chinese
<c-row>
<c-col lg="4">
<c-date-picker placeholder="入住日期" locale="zh-CN" />
</c-col>
</c-row>
Japanese
<c-row>
<c-col lg="4">
<c-date-picker placeholder="日付を選択" locale="ja" />
</c-col>
</c-row>
Korean
<c-row>
<c-col lg="4">
<c-date-picker placeholder="날짜 선택" locale="ko" navYearFirst />
</c-col>
</c-row>
Right to left support
RTL support is built-in and can be explicitly controlled through the $enable-rtl
variables in scss.
Hebrew
<c-row>
<c-col lg="4">
<div dir="rtl">
<c-date-picker locale="he-IL" placeholder="בחר תאריך" weekdayFormat="narrow" />
</div>
</c-col>
</c-row>
Persian
<c-row>
<c-col lg="4">
<div dir="rtl">
<c-date-picker inputReadOnly locale="fa-IR" placeholder="تاریخ شروع" weekdayFormat="narrow" />
</div>
</c-col>
</c-row>
Forms
Angular handles user input through reactive and template-driven forms. CoreUI Date Picker supports both options.
Reactive
Form value: { "datePicker": "2025-06-15T22:00:00.000Z" }
datePicker value: 6/16/2025
<c-row>
<c-col lg="4">
<form [formGroup]="formGroup">
<c-date-picker formControlName="datePicker" />
</form>
</c-col>
</c-row>
<br>
Form value: {{ formGroup.value | json }}
<br>
datePicker value: {{ toLocaleDateString }}
import { JsonPipe } from '@angular/common';
import { Component, OnInit, signal } from '@angular/core';
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
import { ColComponent, DatePickerComponent, RowComponent } from '@coreui/angular';
interface IDatePickerForm {
datePicker: FormControl<Date | undefined | null>;
}
@Component({
selector: 'docs-date-picker13',
templateUrl: './date-picker13.component.html',
standalone: true,
imports: [RowComponent, ColComponent, ReactiveFormsModule, DatePickerComponent, JsonPipe]
})
export class DatePicker13Component implements OnInit {
date = new Date();
formGroup!: FormGroup<IDatePickerForm>;
readonly #toLocaleDateString = signal('');
get toLocaleDateString() {
return this.#toLocaleDateString();
}
ngOnInit(): void {
const date = new Date(this.date.getFullYear(), this.date.getMonth(), this.date.getDate());
this.formGroup = new FormGroup<IDatePickerForm>({
datePicker: new FormControl(date, { nonNullable: false })
});
this.formGroup.valueChanges.subscribe((value) => {
this.#toLocaleDateString.set(value.datePicker?.toLocaleDateString() ?? '');
});
}
}
Template-driven
Form value: { "datePicker": "2025-06-16T22:00:00.000Z" }
datePicker value: Tuesday, June 17, 2025
<c-row>
<c-col lg="4">
<form #form="ngForm">
<c-date-picker [(ngModel)]="date" name="datePicker" />
</form>
</c-col>
</c-row>
<br>
Form value: {{ form.value | json }}
<br>
datePicker value: {{ form.value['datePicker'] | date:'fullDate'}}
import { DatePipe, JsonPipe } from '@angular/common';
import { Component, OnInit } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { ColComponent, DatePickerComponent, RowComponent } from '@coreui/angular';
@Component({
selector: 'docs-date-picker14',
templateUrl: './date-picker14.component.html',
standalone: true,
imports: [RowComponent, ColComponent, ReactiveFormsModule, FormsModule, DatePickerComponent, JsonPipe, DatePipe]
})
export class DatePicker14Component implements OnInit {
date!: Date;
ngOnInit(): void {
const date = new Date();
this.date = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);
}
}
API reference
DatePicker Module
import {
DatePickerModule,
DropdownModule,
SharedModule
} from '@coreui/angular';
@NgModule({
imports: [
DatePickerModule,
DropdownModule,
SharedModule
]
})
export class AppModule() { }
c-date-picker
component
Inputs
name | description | type | default |
---|---|---|---|
date |
Initial selected date. | Date |
undefined |
calendarDate |
Default date month of the component. | Date |
undefined |
cleaner |
Toggle visibility or set the content of the cleaner button. | boolean |
true |
closeOnSelect |
Determine if dropdown should be closed when component value is set. | boolean |
false |
disabled |
Toggle the disabled state for the component. | boolean |
false |
disabledDates |
List of dates that cannot be selected. | (Date | Date[])[] |
undefined |
firstDayOfWeek |
Sets the day of start week. | number |
1 |
format 4.5.26+ |
Formats a date display. See: DatePipe format options. Makes the input read-only. | string |
undefined |
disabled |
Toggle the disabled state for the component. | boolean |
false |
indicator |
Toggle visibility or set the content of the input indicator. | boolean |
true |
inputReadOnly |
Toggle the readonly state for the input. | boolean |
false |
locale |
Sets the default locale for components. If not set, it is inherited from the browser. | string |
default |
maxDate |
Max selectable date. | Date |
undefined |
minDate |
Min selectable date. | Date |
undefined |
navYearFirst |
Reorder year-month navigation, and render year first. | boolean |
false |
navigation |
Show arrows navigation. | boolean |
true |
placeholder |
Specifies hint visible in date input. | string |
Select date |
size |
Size the component input small or large. | sm | lg |
undefined |
dayFormat |
Set the format of day number. | numeric | 2-digit | (date: Date) => string | number |
numeric |
weekdayFormat |
Set length or format of day name, | number | long | narrow | short |
2 |
selectAdjacentDays 4.5.5+ |
Days in adjacent months shown before or after the current month are selectable. This only applies if the showAdjacentDays option is set to true . |
boolean |
false |
showAdjacentDays 4.5.5+ |
Display dates in adjacent months (non-selectable) at the start/end of the current month. | boolean |
true |
valid |
Set input validation visual feedback. | boolean |
undefined |
showWeekNumber |
Display ISO week numbers in month view. | boolean |
undefined |
weekNumbersLabel |
Label displayed over week numbers in the calendar. | string |
undefined |
inputDateFormat |
Custom function to format the selected date into a string according to a custom format. | (date: Date) => string |
undefined |
inputDateParse |
Custom function to parse the input value into a valid Date object. | `(date: string | Date) => Date` |
Outputs
name | description | type |
---|---|---|
dateChange |
Event emitted on date change |
Date |
calendarCellHover |
Event emitted on calendar cell hover | Date |
calendarDateChange |
Event emitted on calendar month change | Date |
valueChange |
Event emitted on value change |
Date |