:获取 Umm al-Qura 日期库的完整指南)
UI组件前端【免费下载链接】react-day-pickerDayPicker is a customizable date picker component for React. Add date pickers, calendars, and date inputs to your web applications.项目地址https://gitcode.com/gh_mirrors/re/react-day-picker点击查看免费下载getDateLib()是daypicker/hijri包暴露的顶层函数用于获取内置 Umm al-Qura回历/希吉来历日期库实例。本文以 API 文档 为骨架结合 hijri 包源码 与 DateLib 基类实现讲解它的签名、参数、返回类型、底层 Hijri 覆盖逻辑与实际使用场景——读完你可以直接用它完成回历日期的格式化、换算与自定义配置。函数签名与作用根据 API 文档 的定义getDateLib(options?): DateLib参数options?类型为DateLibOptions可选。返回值DateLib即用于回历日历的日期库实例。定义位置packages/hijri/src/hijri/index.tsx。其实际实现非常简洁源码/** Returns the date library used in the Hijri calendar. */ export const getDateLib (options?: DateLibOptions) { return new DateLib(options, hijriDateLib); };getDateLib()内部做了两件事用传入的options实例化基类DateLib同时把 Hijri 日历专属的一组函数覆盖hijriDateLib作为第二参数注入。也就是说它是标准的DateLib 回历算法覆盖的组合产物从包内导出方便你在不渲染组件的前提下直接使用回历日期能力。DateLibOptions可配置的参数说明DateLibOptions定义在 packages/react-day-picker/src/classes/DateLib.ts它继承了date-fns的FormatOptions、StartOfWeekOptions与EndOfWeekOptions并增加了以下字段参数类型说明Datetypeof Date用于创建Date对象的构造函数可注入自定义日期实现localeDayPickerLocale格式化日期使用的 locale扩展自date-fns的Locale额外支持 DayPicker 专属 labelstimeZonestring日期使用的时区v9.5.0 起支持numeralsNumerals数字的编号系统如latn拉丁、arab阿拉伯文数字等基类DateLib构造函数会合并选项并给定默认值源码constructor(options?: DateLibOptions, overrides?: Partialtypeof DateLib.prototype) { this.options { locale: enUS, ...options }; this.overrides overrides; }默认 locale 是英文en-US而getDateLib()传入的hijriDateLib覆盖集则决定了日期运算与格式化走回历逻辑。常用调用示例import { getDateLib } from daypicker/hijri; // 1. 使用默认选项ar-SA 风格回历格式化、拉丁数字 const dateLib getDateLib(); // 2. 指定 locale 与数字系统 const dateLib getDateLib({ locale: arSA, // 从 daypicker/hijri 导入 numerals: arab, }); // 3. 指定时区 const dateLib getDateLib({ timeZone: Asia/Riyadh });从源码结构看getDateLib与DayPicker组件共享同一套 Hijri 覆盖集组件内部通过dateLib{{ ...hijriDateLib, ...dateLibProp }}注入源码因此用getDateLib()拿到的实例行为和组件内部默认使用的日期库一致。Hijri 覆盖集hijriDateLib 里有什么hijriDateLib从./lib/index.js导入packages/hijri/src/hijri/lib/index.ts该索引文件聚合了 17 个回历专用的函数覆盖addMonths、addYears、differenceInCalendarMonths、eachMonthOfInterval、eachYearOfInterval、endOfMonth、endOfYear、format、getMonth、getYear、isSameMonth、isSameYear、newDate、setMonth、setYear、startOfMonth、startOfYear。这些覆盖会被注入DateLib基类的overrides字段。基类中几乎所有方法如addDays、isSameDay、format等见 DateLib.ts都会优先调用this.overrides?.xxx否则回退到date-fns的默认实现。例如addMonths (date: Date, amount: number): Date { return this.overrides?.addMonths ? this.overrides.addMonths(date, amount) : addMonths(date, amount); };这意味着凡是被覆盖的函数getDateLib()返回的实例都会执行回历语义未被覆盖的函数如isSameDay、addDays则保持标准公历行为。回历格式化的实现要点以最核心的format覆盖为例packages/hijri/src/hijri/lib/format.ts它优先使用Intl.DateTimeFormat配合calendar: islamic-umalquraUmm al-Qura 历法做本地化格式化const formatWithUmmAlQura (date, localeCode, options) { try { return new Intl.DateTimeFormat(localeCode, { ...options, calendar: UMM_AL_QURA_CALENDAR, // islamic-umalqura numberingSystem: BASE_NUMBERING_SYSTEM, // latn }).format(date); } catch { return undefined; // 运行时环境不支持时回退到内部 fallback } };format支持常见的 date-fns 格式串LLLL y、yyyy-MM-dd、P/PP/PPP/PPPP、cccc星期全名、M/d等并针对年月日数值做了回历化处理当Intl不支持islamic-umalqura时会回退到 fallbackLocaleData.ts 提供的月份/星期名数据与内置拼接格式保证在任何环境都能输出回历日期。日期换算与范围限制newDate覆盖packages/hijri/src/hijri/lib/newDate.ts会把回历年、月、日直接换算为公历Dateexport function newDate(year: number, monthIndex: number, day: number): Date { return toGregorianDate({ year, monthIndex, day }); }换算依赖 Umm al-Qura 转换器见package.json中的依赖tabby_ai/hijri-converterpackages/hijri/package.json其可换算范围在 range.ts 中限定为公历 1924-08-01 至 2077-11-16对应回历 1343-01-01 至 1500-12-30。超出范围的日期会被clampGregorianDate钳制到边界避免运行时换算错误。典型使用场景把 getDateLib 用于回历业务逻辑getDateLib()适合在只需要日期库、不需要渲染日历组件的场景使用例如表单校验、服务端换算、自定义格式化工具等import { getDateLib } from daypicker/hijri; import { arSA } from daypicker/hijri; const dateLib getDateLib({ locale: arSA, numerals: arab }); // 构造回历日期1446 年 9 月 8 日 → 公历 Date const ramadanStart dateLib.newDate(1446, 8, 1); // 以回历语义加一个月 / 一年 const nextMonth dateLib.addMonths(ramadanStart, 1); const nextYear dateLib.addYears(ramadanStart, 1); // 获取回历年份 / 月份 const year dateLib.getYear(ramadanStart); // 1446 const month dateLib.getMonth(ramadanStart); // 80 起即斋月 // 回历格式化 dateLib.format(ramadanStart, LLLL y); // 例如 رمضان ١٤٤٦ dateLib.format(ramadanStart, yyyy-MM-dd); // 回历数字日期若要控制数字显示可在 options 中切换numerals。需要注意numerals与locale的搭配会影响最终输出——组件测试中展示了三种组合默认ar-SAarab、enUSlatn、ar-SAlatn的差异见 packages/hijri/src/hijri/index.test.tsx。与 DayPicker 组件的关系getDateLib与回历DayPicker组件packages/hijri/src/hijri/index.tsx出自同一模块并共享同一份 Hijri 覆盖集组件默认行为locale默认ar-SA、dir默认rtl、numerals默认arab、默认月份范围 1924-08-01 至 2077-11-16组件通过dateLib{{ ...hijriDateLib, ...dateLibProp }}允许外部dateLibprop 覆盖默认回历实现测试用例验证了自定义覆盖优先级高于回历默认index.test.tsx因此当你通过getDateLib(options)自建实例时得到的即是组件内部所用的同款回历日期库——两者可放心混用。小结getDateLib()是daypicker/hijri面向纯逻辑使用的核心入口签名getDateLib(options?: DateLibOptions): DateLib参数可选返回值注入了回历覆盖集的DateLib实例覆盖 17 个日期函数底层基于date-fns包装回历换算依赖tabby_ai/hijri-converter格式化优先走Intl.DateTimeFormat的islamic-umalqura历法并带有环境回退范围仅支持公历 1924-08-01 至 2077-11-16回历 1343-01-01 至 1500-12-30超界日期会被钳制适用场景表单校验、日期换算、自定义格式化等无需渲染组件的业务逻辑。想深入了解底层实现可继续阅读 hijri 包的 lib 目录含各函数的单测与 DateLib 基类。赞分享UI组件前端【免费下载链接】react-day-pickerDayPicker is a customizable date picker component for React. Add date pickers, calendars, and date inputs to your web applications.项目地址https://gitcode.com/gh_mirrors/re/react-day-picker点击查看免费下载相关推荐React Day Picker与日期库集成终极指南Day.js、date-fns和Luxon完全教程React Day Picker与日期库集成终极指南Day.js、date fns和Luxon完全教程 React Day Picker是一个高度可定制的ReUI组件前端React-Day-Picker 入门指南构建优雅的日期选择组件React Day Picker 入门指南构建优雅的日期选择组件 什么是 React Day Picker React Day Picker 是一个轻量级、UI组件前端ik_llama.cpp 中 CUDA Flash Attention 对异构 K/V 头大小的处理从故障防护到完整支持的演进ik_llama.cpp 中 CUDA Flash Attention 对异构 K/V 头大小的处理从故障防护到完整支持的演进 导读 本文围绕 ik_llamUI组件前端上一篇runlike与CI/CD流水线集成自动化Docker容器管理的终极解决方案下一篇标题掌握设备控制核心——sunxi-tools全志SoC的全能助手创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考