Documentation / jalali-js
jalali-js
Jalali (Persian, Shamsi) to Gregorian conversion core. TypeScript-native, zero runtime dependencies, framework-agnostic.
Start here: Live demo · Documentation
npm ecosystem: jalali-js · @jalali-js/i18n · @jalali-js/nlp · @jalali-js/holidays · @jalali-js/react · @jalali-js/vue · @jalali-js/web · @jalali-js/ui-react · @jalali-js/ui-vue · @jalali-js/ui-web
Contents
Install
sh
npm install jalali-jsCompatibility
| Item | Support |
|---|---|
| Runtime | Modern Node and browsers |
| Node | 22 and 24 (CI matrix) |
| TypeScript | First-class types, no @types package |
| Dependencies | None at runtime |
| Frameworks | None required. Bindings are separate packages |
Quick start
ts
import { createCalendar, toGregorian, fromGregorian } from 'jalali-js';
const jalali = createCalendar({ system: 'jalali' });
jalali.today(); // { year, month, day }
toGregorian({ year: 1403, month: 5, day: 15 }, 'jalali');
// { year: 2024, month: 8, day: 5 }
fromGregorian({ year: 2024, month: 8, day: 5 }, 'jalali');
// { year: 1403, month: 5, day: 15 }API
Conversion and factory
createCalendar({ system, precision?, timeZone?, valueFormat?, engine? })toGregorian(date, system, options?)/fromGregorian(date, system, options?)engine: 'astronomical'opts into Tehran-meridian Nowruz (Meeus). Arithmetic is the default.
Date math and queries
addDays, addMonths, addYears, diffDates, startOf, endOf, isBefore, isAfter, isSameDay, isBetween, isToday, dayOfWeek.
Grid, selection, storage, time
buildCalendarGrid,nextMonth,previousMonthSelectionRules,isDateSelectable,isRangeSelectabletoStorageValueandvalueFormat(gregorian-isodefault, plusdate,epoch, Jalali shapes)- Time helpers:
listHours,listMinutes,withTime - Event layout helpers:
layoutMonthEvents,layoutWeekEvents,layoutDayTimedEvents
Full signatures: API reference.
Options
| Option | Values (main) | Default | Notes |
|---|---|---|---|
system | 'jalali' | 'gregorian' | required | Display / conversion calendar |
precision | 'date' | 'datetime' | 'zoned-datetime' | 'date' | Matching TC39 Temporal-style tiers |
valueFormat | 'gregorian-iso' | 'date' | 'epoch' | … | 'gregorian-iso' | Shape of stored values from pickers |
engine | 'arithmetic' | 'astronomical' | 'arithmetic' | Leap and Nowruz rule |
timeZone | IANA id or 'auto' | - | For zoned-datetime ('auto' is SSR-safe) |
Display stays Jalali when you ask for it. Storage stays Gregorian by default, like <input type="date">.
Theming
This package has no UI. Theme pickers through CSS variables in @jalali-js/react, @jalali-js/vue, or @jalali-js/web.
Links
License
MIT
Interfaces
- CalendarDate
- CalendarDateFields
- CalendarDateTime
- CalendarEngine
- CalendarEngineOptions
- CalendarEvent
- CalendarGridDay
- CreateDateCalendarOptions
- CreateDateTimeCalendarOptions
- CreateZonedDateTimeCalendarOptions
- DateCalendar
- DateTimeCalendar
- EventLaneSegment
- NativeCalendarObject
- SelectionRules
- TimedEventBlock
- TimelineOptions
- TimeOfDay
- WallClockFields
- ZonedCalendarDateTime
- ZonedDateTimeCalendar
Type Aliases
- AnyCalendarDate
- Calendar
- CalendarSystem
- CreateCalendarOptions
- DateFieldsWithSystem
- DiffUnit
- EventCalendarView
- JalaliEngineId
- PeriodUnit
- Precision
- StorageValue
- TimelineDirection
- TimelineLayout
- TimelineMarkerShape
- ValueFormat
Variables
- gregorianEngine
- jalaliAstronomicalEngine
- jalaliEngine
- ROADMAP_LEFT_X
- ROADMAP_RIGHT_X
- TIMELINE_ACCENT_COLORS
- WEEK_START_DAY
Functions
- addDays
- addMonths
- addYears
- buildCalendarGrid
- compareDates
- createCalendar
- dayOfWeek
- daysForEventView
- diffDates
- endOf
- eventCoversDate
- eventIsAllDay
- eventMinutesOnDate
- eventsForDate
- eventsForTimeline
- findEventById
- fromGregorian
- getCalendarEngine
- getOffsetMinutes
- instantToZonedFields
- isAfter
- isBefore
- isBetween
- isBothSidesTimelineLayout
- isDateSelectable
- isRangeSelectable
- isSameDay
- isToday
- isValidEventSpan
- laneCountOf
- layoutDaysTimedEvents
- layoutDayTimedEvents
- layoutMonthEvents
- layoutWeekEvents
- listHours
- listMinutes
- nextMonth
- nowruzJulianDayNumber
- previousMonth
- resolveTimelineLayout
- resolveTimeZone
- roadmapTrackPath
- shiftEventViewAnchor
- snapMinute
- startOf
- timedBlockStyle
- timelineAccentFor
- timelineEventDateTime
- timeOfDay
- toGregorian
- toStorageValue
- weekdayLabelsForGrid
- withTime
- zonedWallClockToInstant