luxon-hijri/.github/wiki/examples/islamic-holidays.md

56 lines
2.1 KiB
Markdown

# Example: Islamic Holiday Calendar
Generate Gregorian dates for major Islamic observances for a given Hijri year.
```js
import { toGregorian } from 'luxon-hijri';
const HY = 1446;
const holidays = [
{ name: 'Islamic New Year', hm: 1, hd: 1 },
{ name: 'Ashura', hm: 1, hd: 10 },
{ name: "Mawlid al-Nabi", hm: 3, hd: 12 },
{ name: 'Isra wal Miraj', hm: 7, hd: 27 },
{ name: "Laylat al-Bara'ah", hm: 8, hd: 15 },
{ name: 'Ramadan begins', hm: 9, hd: 1 },
{ name: 'Laylat al-Qadr (27th)', hm: 9, hd: 27 },
{ name: 'Eid al-Fitr', hm: 10, hd: 1 },
{ name: 'Arafat Day', hm: 12, hd: 9 },
{ name: 'Eid al-Adha', hm: 12, hd: 10 },
];
const DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
console.log(`Islamic holidays — ${HY} AH\n`);
console.log(`${'Observance'.padEnd(28)} ${'Hijri'.padEnd(14)} Gregorian`);
console.log('-'.repeat(64));
for (const { name, hm, hd } of holidays) {
const greg = toGregorian(HY, hm, hd);
const iso = greg.toISOString().slice(0, 10);
const weekday = DAYS[greg.getUTCDay()];
const hijri = `${hd}/${hm}/${HY}`;
console.log(`${name.padEnd(28)} ${hijri.padEnd(14)} ${iso} (${weekday})`);
}
```
Sample output:
```
Islamic holidays — 1446 AH
Observance Hijri Gregorian
----------------------------------------------------------------
Islamic New Year 1/1/1446 2024-07-07 (Sunday)
Ashura 10/1/1446 2024-07-16 (Tuesday)
Mawlid al-Nabi 12/3/1446 2024-09-15 (Sunday)
Isra wal Miraj 27/7/1446 2025-01-27 (Monday)
Laylat al-Bara'ah 15/8/1446 2025-02-13 (Thursday)
Ramadan begins 1/9/1446 2025-03-01 (Saturday)
Laylat al-Qadr (27th) 27/9/1446 2025-03-27 (Thursday)
Eid al-Fitr 1/10/1446 2025-03-30 (Sunday)
Arafat Day 9/12/1446 2025-06-05 (Thursday)
Eid al-Adha 10/12/1446 2025-06-06 (Friday)
```