misri_hijri 0.1.0
misri_hijri: ^0.1.0 copied to clipboard
Hijri calendar dates for Dart/Flutter with a choice of calculation system — Misri (fixed tabular, 30-year cycle) or Umm al-Qura (Saudi official, astronomical lookup table) — behind one shared API.
example/misri_hijri_example.dart
// Run with: dart run example/misri_hijri_example.dart
//
// Shows the two things the package does: pick a calculation system with a
// single [HijriCalendarType] parameter, then use the returned
// [HijriCalendarBase] identically regardless of which system produced it.
import 'package:misri_hijri/misri_hijri.dart';
void main() {
// --- Today, in each calendar system ---------------------------------------
final misriToday = Hijri.now(type: HijriCalendarType.misri);
final uaqToday = Hijri.now(type: HijriCalendarType.ummAlQura);
print('Today');
print(' Misri: ${misriToday.format('DDDD, dd MMMM yyyy')}');
print(' Umm al-Qura: ${uaqToday.format('DDDD, dd MMMM yyyy')}');
// The two tabular/astronomical systems can differ by a day.
if (!misriToday.isAtSameMomentAs(uaqToday)) {
print(' (the two systems disagree by a day today)');
}
// --- Convert a specific Gregorian date -----------------------------------
final onDate = Hijri.fromDate(
DateTime(2025, 3, 20),
type: HijriCalendarType.ummAlQura,
);
print('\n2025-03-20 in Umm al-Qura: ${onDate.format('yyyy-mm-dd')} '
'(${onDate.monthName})');
print(' back to Gregorian: ${onDate.toDateTime()}');
// --- Build from explicit Hijri Y/M/D -----------------------------------
final eid = Hijri.fromHijri(1446, 10, 1, type: HijriCalendarType.ummAlQura);
print('\n1 Shawwal 1446 falls on ${eid.format('DDDD, dd MMMM yyyy')}');
print(' days in that month: ${eid.daysInMonth}');
// --- Date arithmetic ----------------------------------------------------
final in100Days = misriToday.addDays(100);
final in3Months = misriToday.addMonths(3);
print('\n100 days from now (Misri): ${in100Days.format('dd MMMM yyyy')}');
print('3 months from now (Misri): ${in3Months.format('dd MMMM yyyy')}');
// --- Localised output (Arabic month names + Arabic-Indic digits) -------
final ar = Hijri.fromHijri(
1446,
9,
1,
type: HijriCalendarType.ummAlQura,
locale: 'ar',
);
print('\nArabic locale: ${ar.format('dd MMMM yyyy')}');
// --- The whole HijriCalendarBase surface is identical either way -------
void report(HijriCalendarBase date) {
print(' [${date.calendarType.name}]'
' iso=${date.isoFormat}'
' leap=${date.isLeapYear}'
' daysInMonth=${date.getDaysInMonth(date.year, date.month)}'
' yearLen=${date.lengthOfYear()}'
' -> ${date.fullDate()}');
}
print('\nSame accessors, both systems:');
report(Hijri.now(type: HijriCalendarType.misri));
report(Hijri.now(type: HijriCalendarType.ummAlQura));
// --- Write an API that accepts either system --------------------------
void describe(HijriCalendarBase date) {
print(' [${date.calendarType.name}] ${date.format('DDDD dd MMMM yyyy')}');
}
print('\nSame function, both systems:');
describe(Hijri.now(type: HijriCalendarType.misri));
describe(Hijri.now(type: HijriCalendarType.ummAlQura));
}