You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue3+Vuetify项目中实现Hijri日期选择器?

Vue3 + Vuetify 集成Hijri日期选择器方案

适配Vue3的推荐库

  • vue3-hijri-datepicker:纯Vue3实现,无jQuery等额外依赖,原生支持Hijri日期选择,可直接集成到Vuetify项目,支持自定义样式匹配Vuetify主题,基础功能完善。
  • @syncfusion/ej2-vue-calendars:Syncfusion的Vue3组件库,包含支持Hijri模式的日期选择器,提供免费社区版,适配Vuetify生态,支持日期范围选择、格式自定义等进阶功能。
  • PrimeVue DatePicker:PrimeVue的日期选择器组件支持Hijri日历模式,可与Vuetify共存,配置简单,样式可通过CSS变量自定义匹配Vuetify设计规范。

手动实现Hijri日期选择器方法

1. 核心日期转换依赖

选择无依赖的纯JS Hijri-公历转换库,例如hijri-js或ummalqura-calendar,通过npm安装后直接在组件中引入,用于处理两种日历体系的日期互转。

2. 扩展Vuetify DatePicker适配器

Vuetify的v-date-picker支持自定义日期适配器,通过实现适配器接口替换默认的公历逻辑,适配Hijri日历:

<template>
  <v-date-picker 
    v-model="selectedDate"
    :adapter="hijriAdapter"
    locale="ar"
  ></v-date-picker>
</template>

<script setup>
import { ref } from 'vue'
import hijriJs from 'hijri-js'

const selectedDate = ref(null)

const hijriAdapter = {
  // 将Hijri日期转为JS Date对象
  getDate: (hijri) => {
    const greg = hijriJs.HijriToGregorian(hijri.year, hijri.month, hijri.day)
    return new Date(greg.year, greg.month - 1, greg.day)
  },
  // 将JS Date转为Hijri日期结构
  setDate: (date) => {
    const hijri = hijriJs.GregorianToHijri(date.getFullYear(), date.getMonth() + 1, date.getDate())
    return { year: hijri.year, month: hijri.month, day: hijri.day }
  },
  // 自定义Hijri日期格式化
  format: (date, format = 'DD/MM/YYYY') => {
    const hijri = hijriJs.GregorianToHijri(date.getFullYear(), date.getMonth() + 1, date.getDate())
    return `${hijri.day}/${hijri.month}/${hijri.year}`
  },
  // 实现月份名称返回接口
  getMonthNames: (type) => {
    return ['محرم', 'صفر', 'ربيع الأول', 'ربيع الثاني', 'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان', 'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة']
  }
}
</script>

3. 自定义独立组件

若需要完全自定义UI,可基于Vue3组合式API封装组件:

  • 用ref管理当前选中的Hijri日期、显示的年月等状态;
  • 借助转换库生成每月的日期列表;
  • 搭配Vuetify的v-card、v-btn、v-grid等基础组件构建日历界面,实现月份切换、日期选择交互。

学习资源

  • Vuetify官方文档:重点查看v-date-picker的自定义适配器章节,掌握适配器的核心接口规范;
  • Hijri日历官方规范:了解Umm al-Qura日历的月份规则、闰年计算等核心逻辑,避免转换错误;
  • Vue3组合式API指南:学习如何封装可复用组件,高效管理组件状态与交互逻辑。

内容的提问来源于stack exchange,提问作者Shiref

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:15:36