dayjs-hijri-plus/README.md
Aric Camarata f9ad1e52ed fix: convert the displayed calendar date in toHijri for hijri-core's UTC-day contract
toHijri() now passes Date.UTC(year, month, date) to hijri-core instead of the raw
instant from this.toDate(). Fixes wrong-Hijri-day results around UTC-midnight on
hosts east or west of UTC. Lock-step with hijri-core fix/utc-day-boundary.
2026-06-10 16:35:37 -04:00

2.2 KiB

dayjs-hijri-plus

npm version CI License: MIT

A Day.js plugin that adds Hijri calendar support. Converts Gregorian dates to and from Hijri, provides Hijri-aware formatting, and delegates all calendar logic to hijri-core.

Supports Umm al-Qura (UAQ) and FCNA/ISNA calendars. Custom engines can be registered at runtime.

Installation

pnpm add dayjs dayjs-hijri-plus hijri-core

Both dayjs and hijri-core are peer dependencies.

Quick Start

import dayjs from 'dayjs';
import hijriPlugin from 'dayjs-hijri-plus';

dayjs.extend(hijriPlugin);

const d = dayjs('2023-03-23');
d.toHijri();                              // { hy: 1444, hm: 9, hd: 1 }
d.formatHijri('iD iMMMM iYYYY');         // '1 Ramadan 1444'
d.formatHijri('iYYYY-iMM-iDD');          // '1444-09-01'

dayjs.fromHijri(1444, 10, 1).format('YYYY-MM-DD'); // '2023-04-21'

Documentation

Full API reference, examples, and architecture notes are on the GitHub Wiki.

Day boundaries and time zones

.toHijri() converts the calendar date the dayjs instance displays — the same date you would read off the screen — regardless of the host's system timezone or whether the dayjs utc plugin is active. A call like dayjs('2025-03-01').toHijri() always maps the 1st of March 2025, not whatever local instant that string resolves to in UTC.

Religious start-of-day at sunset is out of scope. Sunset-aware day boundaries require external prayer-time data and are not handled here.

  • hijri-core: the zero-dependency Hijri calendar engine this plugin wraps
  • luxon-hijri: the same conversion for Luxon users
  • pray-calc: Islamic prayer time calculation

License

MIT. Copyright (c) 2026 Aric Camarata.