A minimalist, powerful, and beautifully designed Date & Time Picker for Angular 18+, built with Signals.
ไธญๆ็ | English
Check out the component in action: https://lanxuexing.github.io/ng-laydate/
- ๐ Signals-Based: High performance and reactive by design.
- ๐
Comprehensive Modes: Supports
year,month,date,time, anddatetime. - ๐ Range Selection: Simple or linked range selection (consecutive months).
- โก Shortcuts: Customizable quick-selection buttons (sidebar or footer).
- ๐จ Rich Themes: Includes
default,molv(teal),grid,circle,dark, and a specialfullpanel(side-by-side) theme. - ๐ Precision Control: Intelligent H:M:S column visibility and auto-scrolling.
- ๐ Internationalization: Full support for Chinese (
cn) and English (en). - ๐ฉ Special Days: Built-in Gregorian festivals and customizable Holiday/Workday markers.
- ๐๏ธ Custom Content: Flexible cell rendering via
cellRenderormarkfunctions. - ๐ Dark Mode: Premium dark theme support.
- ๐ Form Support: Full two-way binding support for Template-driven and Reactive Forms (
ControlValueAccessor).
This component is available as an Angular Library.
npm install ng-laydateRegister NgLaydateDirective in your standalone component or module.
import { NgLaydateDirective } from 'ng-laydate';
@Component({
standalone: true,
imports: [NgLaydateDirective, ...]
})
export class MyComponent {}Just add the [laydate] directive to any input element.
<!-- Simple Date Picker -->
<input type="text" laydate placeholder="Select Date">
<!-- Datetime Range with FullPanel Theme -->
<input type="text" [laydate]="{
type: 'datetime',
range: true,
}" placeholder="Select DateTime Range">The component fully implements ControlValueAccessor, allowing you to use ngModel or formControlName seamlessly.
<input type="text" laydate [(ngModel)]="dateValue"><form [formGroup]="myForm">
<input type="text" laydate formControlName="date">
</form>Use the component directly for static or embedded pickers.
<ng-laydate
[config]="{position: 'static', theme: 'molv'}"
(done)="onDateSelected($event)"
/>| Property | Type | Default | Description |
|---|---|---|---|
id |
string |
- | Custom ID for the picker instance. |
type |
'year'|'month'|'date'|'time'|'datetime' |
'date' |
The type of selector to display. |
range |
boolean|string |
false |
Enable range selection. Can be true (separator -) or a customized string (e.g. ' ~ '). |
rangeLinked |
boolean |
false |
When true, left and right panels are linked (consecutive months). |
format |
string |
'yyyy-MM-dd' |
The date output format (e.g., yyyy-MM-dd HH:mm:ss). |
value |
string | Date |
- | Initial value of the picker. |
isInitValue |
boolean |
true |
Whether to automatically populate the initial value to the element. |
min / max |
string | Date | number |
- | Min/Max selectable date. Supports string, Date, or numeric offset (-7 is 7 days ago). |
trigger |
string |
'click' |
Event that triggers the picker (e.g., focus, click). |
theme |
string | string[] |
'default' |
Theme name (molv, grid, circle, fullpanel, dark) or Hex color. |
shortcuts |
Array |
- | Adv shortcuts (e.g., [{text: 'Today', value: new Date()}]). |
shorthand |
Record<string, string> |
- | Simple shortcuts (e.g., {'yesterday': '2024-01-01'}). |
btns |
string[] |
['clear', 'now', 'confirm'] |
Footer buttons to display and their order. |
lang |
'cn' | 'en' |
'cn' |
Language toggle. |
weekStart |
number |
0 |
Start of the week (0-6, 0 is Sunday). |
darkMode |
boolean |
false |
Force enable dark mode regardless of theme. |
show |
boolean |
false |
Whether to show the picker immediately on render. |
showBottom |
boolean |
true |
Whether to display the footer. |
isPreview |
boolean |
true |
Show the live selection preview in the footer. |
autoConfirm |
boolean |
true |
Automatically confirm and close on selection (single mode only). |
calendar |
boolean |
false |
Show ISO calendar (festivals/solar terms). |
mark |
Record | Function |
- | Mark days (e.g., {'0-0-15': 'Mid'}). |
disabledDate |
Function |
- | Callback for disabling specific dates. Returns true to disable. |
disabledTime |
Function |
- | Callback for disabling specific hours/minutes/seconds. |
cellRender |
Function |
- | Custom renderer for date cells (inserting HTML). |
formatToDisplay |
Function |
- | Formats the value for input box display only. |
holidays |
[string[], string[]] |
- | Highlight holidays/workdays. Format: [[holidys], [workdays]]. |
shade |
boolean | number |
- | Show background overlay or set its opacity. |
zIndex |
number |
66666666 |
The CSS z-index of the picker. |
position |
'absolute'|'fixed'|'static' |
'absolute' |
The positioning strategy. |
ready: Triggered when the picker is rendered.change: Triggered whenever a value changes.done: Triggered when selection is confirmed.close: Triggered when the picker is closed.onConfirm/onNow/onClear: Triggered on footer button clicks.
The component supports a variety of visual styles to match your application:
- Dark: Deep dark mode for professional dashboards.
Tip
Custom Colors: Pass any hex color to theme (e.g., {theme: '#722ed1'}) to instantly brand the component to match your application.
This repository is structured as an Angular Workspace.
- Library Path:
projects/ng-laydate - Demo Path:
projects/laydate-demo
npm start: Run the demo application.npm run build:lib: Build the library for production.npm run build:demo: Build the demo application.npm run build:all: Build everything in one go.
For more complex examples and advanced usage, please refer to the demo source code.
Built with โค๏ธ for the Angular Community.