日期和时间
如何在 Radix Vue 中使用日期和时间。
提示
我们与日期相关的组件的内部运作机制很大程度上受到 Adobe 的 React Aria 团队所做研究和工作的启发,他们创建了在无障碍性、用户体验和灵活性方面都表现出色的健壮日期组件。
该组件依赖于 @internationalized/date 包,该包解决了在 JavaScript 中使用日期和时间时遇到的许多问题。
我们强烈建议您阅读该包的文档,以全面了解其工作原理,并且您需要在您的项目中安装它才能使用与日期相关的组件。
sh
$ npm add @internationalized/date
日期对象
我们在各种组件中使用 @internationalized/date
提供的 DateValue
对象来表示日期。这些对象是不可变的,并提供有关它们所表示的日期类型的相关信息。
CalendarDate
:没有时间组件的日期,例如2023-10-11
。CalendarDateTime
:带有时间组件但没有时区的日期,例如2023-10-11T12:30:00
。ZonedDateTime
:带有时间组件和时区的日期,例如2023-10-11T21:00:00:00-04:00[America/New_York]
。
使用这些对象的优势在于,我们可以非常具体地指定想要的日期类型,并且构建器的行为将适应该类型。
此外,您无需担心处理时区、夏令时或任何其他与日期相关的细微差别。
实用程序函数
该包还提供了一些实用程序函数,这些函数解决了在 JavaScript 中使用日期和时间时遇到的许多问题。
专门设计为与 @internationalized/date 良好配合。
如何使用?
ts
import {
createDateRange,
createDecade,
createMonth,
createYear,
createYearRange,
getDaysInMonth,
hasTime,
isAfter,
isAfterOrSame,
isBefore,
isBeforeOrSame,
isBetween,
isBetweenInclusive,
isCalendarDateTime,
isZonedDateTime,
parseStringToDateValue,
toDate,
} from 'radix-vue/date'
import { CalendarDate, type DateValue } from '@internationalized/date'
const date = new CalendarDate(1995, 8, 18)
const minDate = new CalendarDate(1995, 8, 1)
const maxDate = new CalendarDate(1995, 8, 31)
parseStringToDateValue('1995-08-18') // returns a DateValue object
toDate(date) // returns a Date object
isCalendarDateTime(date) // returns false
isZonedDateTime(date) // returns false
hasTime(date) // returns false
getDaysInMonth(date) // returns 31
isAfter(date, minDate) // returns true
isBeforeOrSame(date, maxDate) // returns true
isAfterOrSame(date, minDate) // returns true
isBefore(date, maxDate) // returns true
isBetweenInclusive(date, minDate, maxDate) // returns true
isBetween(date, minDate, maxDate) // returns true
createMonth({ dateObj: new CalendarDate(1995, 8, 18), weekStartsOn: 0, locale: 'en', fixedWeeks: true }) // returns a grid of days as DateValue for the month, also containing the dateObj, plus an array of days for the month
createYear({ dateObj: new CalendarDate(1995, 8, 18), numberOfMonths: 2, pagedNavigation: true }) // returns an array of months as DateValue, centered around the dateObj taking into account the numberOfMonths and pagedNavigation when returning the months
createDecade({ dateObj: new CalendarDate(1995, 8, 18), startIndex: -10, endIndex: 10 }) // returns a decade centered around the dateObj
createDateRange({ start: new CalendarDate(1995, 8, 18), end: new CalendarDate(2005, 8, 18) }) // returns an array of dates as DateValue between the start and end date
createYearRange({ start: new CalendarDate(1995, 8, 18), end: new CalendarDate(2005, 8, 18) }) // returns an array of years as DateValue between the start and end date