|
Some checks failed
CI / Test (Node 20) (push) Failing after 43s
CI / Test (Node 22) (push) Failing after 35s
CI / Test (Node 24) (push) Failing after 37s
CI / Lint (push) Failing after 33s
CI / Typecheck (push) Failing after 32s
CI / Pack check (push) Failing after 29s
CI / Coverage (push) Failing after 3s
* add Forgejo CI mirror and telemetry disclosure Mirrors .github/workflows/ci.yml to .forgejo/workflows/ for self-hosted runner on git.ariccamarata.com. Adds failure-reporting hook stub (server registration via nself sentry ci enable is a server-side step). Adds telemetry disclosure section to README. * add opt-in telemetry via @acamarata/telemetry (off by default) * chore: update lockfile for @acamarata/telemetry devDep * chore: fix prettier formatting on telemetry import |
||
|---|---|---|
| .forgejo/workflows | ||
| .github | ||
| src | ||
| .editorconfig | ||
| .gitignore | ||
| .npmrc | ||
| .nvmrc | ||
| CHANGELOG.md | ||
| eslint.config.mjs | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| TELEMETRY.md | ||
| test-cjs.cjs | ||
| test.mjs | ||
| tsconfig.json | ||
| tsup.config.ts | ||
| typedoc.json | ||
moment-hijri-plus
Moment.js plugin for Hijri calendar conversion and formatting. Delegates all calendar logic to hijri-core, a zero-dependency Hijri engine with pluggable calendar support (Umm al-Qura and FCNA/ISNA).
Installation
pnpm add moment moment-hijri-plus hijri-core
Both moment and hijri-core are peer dependencies.
Quick Start
import moment from 'moment';
import installHijri from 'moment-hijri-plus';
installHijri(moment);
const m = moment(new Date(2023, 2, 23)); // 23 March 2023
m.toHijri(); // { hy: 1444, hm: 9, hd: 1 } (1 Ramadan 1444 AH)
m.formatHijri('iD iMMMM iYYYY AH'); // '1 Ramadan 1444 AH'
moment.fromHijri(1446, 1, 1); // moment for 7 July 2024
API Summary
Call installHijri(moment) once at startup to add these methods.
| Method | Returns | Description |
|---|---|---|
toHijri(options?) |
HijriDate | null |
Convert to Hijri date object |
hijriYear(options?) |
number | null |
Hijri year |
hijriMonth(options?) |
number | null |
Hijri month (1-12) |
hijriDay(options?) |
number | null |
Hijri day |
isValidHijri(options?) |
boolean |
True if date is within calendar range |
formatHijri(fmt, options?) |
string |
Format with Hijri tokens; non-Hijri tokens pass through |
moment.fromHijri(hy, hm, hd, options?) |
Moment |
Construct moment from Hijri date |
Pass { calendar: 'fcna' } to switch from the default Umm al-Qura calendar to FCNA/ISNA.
Full API reference, format token table, and examples are in the project wiki.
Day boundaries and time zones
Conversions use the calendar date the moment instance displays, not the underlying UTC
instant. A moment("2025-03-01") parsed in any local timezone returns the Hijri date
for March 1st, 2025. A moment created with .utc() uses its UTC components.
Religious day-start at sunset is outside the scope of this package; it depends on location and madhab, and must be handled at the application layer.
Note on Moment.js
Moment.js is in maintenance mode. For new projects, dayjs-hijri-plus offers the same Hijri support on Day.js. This package targets existing codebases already using Moment.js.
Related
- hijri-core: Hijri calendar engine used internally
- dayjs-hijri-plus: same API for Day.js
- luxon-hijri: same API for Luxon
- pray-calc: Islamic prayer time calculation
License
MIT. Copyright (c) 2026 Aric Camarata.
Telemetry
This package supports optional, anonymous usage telemetry via @acamarata/telemetry. It is off by default. See TELEMETRY.md for what is collected and how to enable or disable it.