نسخه پایدار — بدون وابستگی

تقویم شمسی
مدرن و حرفه‌ای

تقویم جلالی خالص با معماری Headless، سه تم زیبا، انتخاب بازه‌ای، ماسک ورودی هوشمند و بدون هیچ وابستگی خارجی.

شروع سریع بررسی ویژگی‌ها
$ npm install pardis-jalali-datepicker
ویژگی‌ها

همه چیزی که به یک تقویم شمسی نیاز دارید

معماری Headless، عملکرد بالا و سازگاری کامل با هر فریمورکی

بدون وابستگی

صفر وابستگی خارجی. الگوریتم‌های تبدیل تاریخ جلالی ↔ میلادی کاملاً خالص و دقیق بدون نیاز به moment.js یا هیچ کتابخانه دیگر.

🧠

معماری Headless

موتور محاسباتی PardisEngine از رابط کاربری جداست. آزادی کامل برای ساخت UI سفارشی با حفظ منطق تاریخ شمسی.

📅

انتخاب بازه‌ای

قابلیت Range Selection با هاور هوشمند، انتخاب شروع و پایان، و تشخیص خودکار ترتیب تاریخ‌ها.

🎨

سه تم آماده

تم مدرن (Clean)، شیشه‌ای (Glassmorphism)، و کلاسیک (Dark Admin) — قابل سفارشی‌سازی با CSS Variables.

⌨️

ماسک ورودی هوشمند

تایپ تاریخ با ماسک خودکار اعداد فارسی، جداکننده خودکار «/»، و پشتیبانی از inputmode="numeric" برای موبایل.

📱

ریسپانسیو و Bottom Sheet

حالت موبایل با Bottom Sheet، پشتیبانی از Touch Events، و سازگاری کامل با همه اندازه‌های صفحه.

تم‌ها

سه تم متفاوت، یک تجربه بی‌نقص

هر تم با CSS Variables کاملاً قابل سفارشی‌سازی است

مدرن / Clean
بهمن ۱۴۰۴
شیدسچپج
۲۸ ۲۹ ۳۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸
شیشه‌ای / Glass
بهمن ۱۴۰۴
شیدسچپج
۲۸ ۲۹ ۳۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸
کلاسیک / Dark
بهمن ۱۴۰۴
شیدسچپج
۲۸ ۲۹ ۳۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸

راه‌اندازی در چند ثانیه

فقط یک فایل JS و یک فایل CSS اضافه کنید. بدون build step، بدون bundler، بدون پیکربندی پیچیده.

  • خروجی همزمان جلالی و میلادی
  • حالت Popover و Inline
  • انتخاب تک تاریخ و بازه‌ای
  • محدوده تاریخ (minDate / maxDate)
  • Callback برای همه رویدادها
  • API کامل با متدهای setValue, clear, destroy
app.js
// 1. Popover mode — bind to input
const dp = new PardisDatepicker('#myInput', {
  outputFormat: 'both',
  onChange: (payload) => {
    payload.jalali.formatted
    // '1404/01/01'
    payload.gregorian.formatted
    // '2025-03-21'
    payload.timestamp
    // unix ms
  }
});

// 2. Inline + Range mode
const range = new PardisDatepicker('#myDiv', {
  inline: true,
  rangeMode: true,
  onRangeSelect: ({ start, end }) => {
    console.log(start, end);
  }
});

// 3. Set limits & navigate
dp.setOption('minDate', {
  jy: 1403, jm: 1, jd: 1
});
dp.setValue(1404, 6, 15);
dp.clear();

مرجع API

همه optionها، متدها و ساختار خروجی

OptionTypeDefaultDescription
inlinebooleanfalseنمایش همیشگی بدون input
rangeModebooleanfalseحالت انتخاب بازه
outputFormat'both' | 'jalali' | 'gregorian''both'فرمت خروجی payload
initialYearnumberامسالسال اولیه نمایش تقویم
initialMonthnumberاین ماهماه اولیه نمایش تقویم
minDate{jy, jm, jd}nullکمترین تاریخ قابل انتخاب
maxDate{jy, jm, jd}nullبیشترین تاریخ قابل انتخاب
onChangefunctionnullCallback هنگام انتخاب تاریخ
onRangeStartfunctionnullCallback شروع انتخاب بازه
onRangeSelectfunctionnullCallback تکمیل انتخاب بازه
onClearfunctionnullCallback پاک کردن انتخاب
MethodReturnDescription
open()voidباز کردن popover تقویم
close()voidبستن popover تقویم
getValue()payload | nullدریافت آخرین تاریخ انتخاب‌شده
setValue(jy, jm, jd)voidانتخاب تاریخ به صورت برنامه‌نویسی
clear()voidپاک کردن انتخاب فعلی
setOption(key, value)voidتغییر option پس از ساخت instance
destroy()voidحذف کامل instance و event listeners
{
  jalali: {
    year: 1404,
    month: 1,
    day: 1,
    monthName: 'فروردین',
    formatted: '1404/01/01',
    formattedPersian: '۱۴۰۴/۰۱/۰۱',
    timestamp: 1742515200000
  },
  gregorian: {
    year: 2025,
    month: 3,
    day: 21,
    monthName: 'March',
    formatted: '2025-03-21',
    date: Date,
    timestamp: 1742515200000
  },
  iso: '2025-03-21',
  timestamp: 1742515200000
}
// Direct engine access
dp.engine.goToNextMonth()
dp.engine.goToPrevMonth()
dp.engine.goToNextYear()
dp.engine.goToPrevYear()
dp.engine.goToToday()
dp.engine.setViewMode('month')

// Listen to view changes
dp.engine.on('viewChange', (info) => {
  info.year
  info.month
  info.monthName
  info.viewMode
})

// Static date conversion
const p = PardisEngine.buildDatePayload(
  1404, 1, 1, 'both'
);

آماده استفاده هستید؟

در کمتر از یک دقیقه تقویم شمسی حرفه‌ای را به پروژه خود اضافه کنید.

شروع کنید مشاهده در GitHub