luxon-hijri/.wiki/API-Reference.md

10 KiB
Raw Blame History

API Reference

Functions

toHijri(date, options?)

Converts a Gregorian Date to a Hijri date object.

function toHijri(date: Date, options?: ConversionOptions): HijriDate | null;

Parameters

Name Type Description
date Date Any valid JavaScript Date.
options ConversionOptions Optional. { calendar: 'uaq' } (default) or { calendar: 'fcna' }.

For the default 'uaq' calendar, the local year/month/day components of the Date are used. For 'fcna', UTC components are used (since FCNA month boundaries are defined in UTC).

Returns HijriDate | null

For UAQ: returns null if the date falls outside the table range (before 1 Muharram 1318 H / 1900-04-30, or at/after 1 Muharram 1501 H / 2077-11-17). For FCNA: returns null only for dates before 1 Muharram 1 AH (pre-Islamic epoch).

Throws Error("Invalid Gregorian date") if the argument is not a valid Date instance.

Example

toHijri(new Date(2023, 2, 23, 12)); // { hy: 1444, hm: 9, hd: 1 }  (UAQ)
toHijri(new Date(2025, 2, 1, 12)); // { hy: 1446, hm: 9, hd: 1 }  (UAQ)
toHijri(new Date(2025, 2, 1, 12), { calendar: 'fcna' }); // { hy: 1446, hm: 9, hd: 1 }  (FCNA)
toHijri(new Date(1800, 0, 1), { calendar: 'uaq' }); // null (before table range)

toGregorian(hy, hm, hd, options?)

Converts a Hijri date to a Gregorian Date.

function toGregorian(hy: number, hm: number, hd: number, options?: ConversionOptions): Date;

Parameters

Name Type Description
hy number Hijri year (13181500 for UAQ; any year ≥ 1 for FCNA)
hm number Hijri month (112)
hd number Hijri day (129 or 130 depending on the month)
options ConversionOptions Optional. { calendar: 'uaq' } (default) or { calendar: 'fcna' }.

Returns Date

Returns a UTC Date at midnight.

Throws Error("Invalid Hijri date") if the date fails validation.

Example

toGregorian(1444, 9, 1); // 2023-03-23T00:00:00.000Z
toGregorian(1446, 9, 1, { calendar: 'fcna' }); // 2025-03-01T00:00:00.000Z
toGregorian(1446, 10, 1, { calendar: 'fcna' }); // 2025-03-30T00:00:00.000Z
toGregorian(1444, 0, 1); // throws: month 0 is invalid

formatHijriDate(date, format)

Formats a Hijri date using a format string with Hijri-specific tokens.

function formatHijriDate(date: HijriDate, format: string): string;

Parameters

Name Type Description
date HijriDate A Hijri date object with hy, hm, hd properties
format string Format string with tokens listed below

Returns string

Tokens in the format string are replaced with the corresponding Hijri values. Unrecognized substrings pass through unchanged.

Format tokens

Token Description Example
iYYYY Year, 4 digits 1444
iYY Year, last 2 digits 44
iMMMM Month, full name Ramadan
iMMM Month, medium name Ramadan
iMM Month, 2 digits, zero-padded 09
iM Month, no padding 9
iDD Day, 2 digits, zero-padded 01
iD Day, no padding 1
iEEEE Weekday, full name Yawm al-Khamis
iEEE Weekday, abbreviated Kham
iE Weekday, numeric (Sunday=1) 5
ioooo Era, full AH
iooo Era, abbreviated AH
HH Hour, 24h, zero-padded 14
H Hour, 24h 14
hh Hour, 12h, zero-padded 02
h Hour, 12h 2
mm Minute, zero-padded 05
m Minute 5
ss Second, zero-padded 30
s Second 30
a AM/PM AM
z, zz, zzz Timezone name UTC
Z, ZZ Timezone offset +00:00

Time, timezone, and weekday tokens are computed from a Gregorian DateTime derived from the Hijri date using the UAQ calendar. For FCNA-derived dates in months where UAQ and FCNA start on different days, weekday and time tokens will reflect the UAQ Gregorian equivalent, not the FCNA one. Pure Hijri tokens (iYYYY, iMM, iDD, iMMMM, etc.) are always accurate regardless of which calendar system produced the date.

Weekday numbering

The weekday arrays follow the Islamic convention where Sunday is the first day:

Index Day iE value
0 Sunday 1
1 Monday 2
2 Tuesday 3
3 Wednesday 4
4 Thursday 5
5 Friday 6
6 Saturday 7

Example

const d = { hy: 1444, hm: 9, hd: 1 };

formatHijriDate(d, 'iYYYY-iMM-iDD'); // "1444-09-01"
formatHijriDate(d, 'iMMMM iD, iYYYY'); // "Ramadan 1, 1444"
formatHijriDate(d, 'iEEEE, iD iMMMM iYYYY ioooo'); // "Yawm al-Khamis, 1 Ramadan 1444 AH"

isValidHijriDate(hy, hm, hd, options?)

Checks whether a Hijri date is valid for the given calendar system.

function isValidHijriDate(hy: number, hm: number, hd: number, options?: ConversionOptions): boolean;

Returns boolean

For UAQ (default): returns false if hy is outside 13181500, hm is outside 112, or hd exceeds the actual days in that month.

For FCNA: hy must be ≥ 1, hm must be 112, and hd must not exceed the computed FCNA month length.

Example

isValidHijriDate(1444, 9, 1); // true
isValidHijriDate(1444, 9, 30); // false - Ramadan 1444 has 29 days (UAQ)
isValidHijriDate(1317, 1, 1); // false - before table range
isValidHijriDate(1501, 1, 1); // false - sentinel boundary
isValidHijriDate(1, 1, 1, { calendar: 'fcna' }); // true  - FCNA supports all years
isValidHijriDate(1600, 1, 1, { calendar: 'fcna' }); // true  - beyond UAQ table, FCNA computed

Types

interface HijriDate {
  hy: number; // Hijri year
  hm: number; // Hijri month (112)
  hd: number; // Hijri day (130)
}

// Calendar system selector.
// 'uaq': Umm al-Qura (default): table-based, covers 13181500 H.
// 'fcna': FCNA/ISNA: astronomical calculation, works for all Hijri years >= 1 AH.
type CalendarSystem = 'uaq' | 'fcna';

interface ConversionOptions {
  calendar?: CalendarSystem;
}

interface HijriYearRecord {
  hy: number; // Hijri year
  dpm: number; // days-per-month bitmask
  gy: number; // Gregorian year of 1 Muharram
  gm: number; // Gregorian month of 1 Muharram
  gd: number; // Gregorian day of 1 Muharram
}

Type exports

import type {
  HijriDate, // { hy, hm, hd }
  HijriYearRecord, // UAQ table row
  CalendarSystem, // 'uaq' | 'fcna'
  ConversionOptions, // { calendar?: CalendarSystem }
} from 'luxon-hijri';

Data exports

import {
  hDatesTable, // HijriYearRecord[] - 184 entries (183 real years + 1 sentinel)
  hmLong, // string[12] - full month names
  hmMedium, // string[12] - medium month names
  hmShort, // string[12] - abbreviated month names
  hwLong, // string[7] - full weekday names (Sunday-first order)
  hwShort, // string[7] - abbreviated weekday names
  hwNumeric, // number[7] - weekday numbers (1-7, Sunday=1)
  formatPatterns, // Record<string, string> - token reference map
} from 'luxon-hijri';

Month name arrays (index 0 = Muharram, index 11 = Dhul Hijjah)

Index hmLong hmMedium hmShort
0 Muharram Muharram Muh
1 Safar Safar Saf
2 Rabi'l Awwal Rabi1 Ra1
3 Rabi'l Thani Rabi2 Ra2
4 Jumadal Awwal Jumada1 Ju1
5 Jumadal Thani Jumada2 Ju2
6 Rajab Rajab Raj
7 Sha'ban Shaban Shb
8 Ramadan Ramadan Ram
9 Shawwal Shawwal Shw
10 Dhul Qi'dah Dhul-Qidah DhQ
11 Dhul Hijjah Dhul-Hijjah DhH

Weekday arrays (index 0 = Sunday, index 6 = Saturday)

Index hwLong hwShort hwNumeric
0 Yawm al-Ahad Ahad 1
1 Yawm al-Ithnayn Ithn 2
2 Yawm ath-Thulatha' Thul 3
3 Yawm al-Arba`a' Arba 4
4 Yawm al-Khamis Kham 5
5 Yawm al-Jum`a Jum`a 6
6 Yawm as-Sabt Sabt 7

Home . Architecture . Hijri Calendar