1- // util/index.ts
21import { format as dfFormat , isValid as dfIsValid , parse as dfParse } from 'date-fns' ;
32import { CalendarDate , fromDate , getLocalTimeZone , type DateValue } from '@internationalized/date' ;
43
54export type Mode = 'single' | 'multiple' | 'range' ;
65
6+ type CalendarLike = { year : number ; month : number ; day : number } ;
7+
8+ function isCalendarLike ( v : unknown ) : v is CalendarLike {
9+ return ! ! v && typeof v === 'object' && 'year' in v && 'month' in v && 'day' in v ;
10+ }
11+
712export function tryParse ( raw : string , fmt : string , locale ?: Locale ) : Date | null {
813 if ( ! raw ?. trim ( ) ) return null ;
914 const p = dfParse ( raw , fmt , new Date ( ) , { locale } ) ;
@@ -41,11 +46,6 @@ export function getSeparator(mode?: Mode, separator?: string): string {
4146 return ( mode === 'range' ? separator : undefined ) ?? ' – ' ;
4247}
4348
44- type CalendarLike = { year : number ; month : number ; day : number } ;
45- function isCalendarLike ( v : unknown ) : v is CalendarLike {
46- return ! ! v && typeof v === 'object' && 'year' in v && 'month' in v && 'day' in v ;
47- }
48-
4949export function toJSDate ( d : unknown ) : Date | undefined {
5050 if ( ! d ) return undefined ;
5151 if ( d instanceof Date ) return d ;
@@ -61,6 +61,5 @@ export function dateToCalendarDate(d: Date): CalendarDate {
6161}
6262
6363export function calendarDateToDate ( dv : DateValue ) : Date {
64- // DateValue has year/month/day; create a local JS Date at midnight.
6564 return new Date ( dv . year , dv . month - 1 , dv . day ) ;
6665}
0 commit comments