إضافة hijri.py - بسم الله الرحمن الرحيم

هذا الالتزام موجود في:
2026-08-05 09:58:12 +00:00
الأصل 1f7e1395d6
التزام bf04656868

55
hijri.py Normal file
عرض الملف

@@ -0,0 +1,55 @@
"""Hijri Calendar Library - مكتبة التقويم الهجري"""
from datetime import date, timedelta
# أم القرى - أشهر التقويم الهجري
HIJRI_MONTHS = [
"محرم", "صفر", "ربيع الأول", "ربيع الثاني",
"جمادى الأولى", "جمادى الآخرة", "رجب",
"شعبان", "رمضان", "شوال", "ذو القعدة", "ذو الحجة"
]
GREGORIAN_MONTHS = [
"يناير", "فبراير", "مارس", "إبريل", "مايو", "يونيو",
"يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"
]
class HijriDate:
def __init__(self, year: int, month: int, day: int):
self.year = year
self.month = month
self.day = day
def format(self, lang="ar"):
if lang == "ar":
return f"{self.day} {HIJRI_MONTHS[self.month-1]} {self.year} هـ"
return f"{self.year}-{self.month:02d}-{self.day:02d} AH"
def __repr__(self):
return self.format()
# Simplified conversion (accurate approximation using Kuwaiti algorithm)
def to_hijri(gregorian_str: str) -> HijriDate:
"""تحويل تاريخ ميلادي إلى هجري"""
g_date = date.fromisoformat(gregorian_str)
jd = int(g_date.toordinal()) + 1721425 # Julian Day
l = jd - 1948440 + 10632
n = int((l - 1) / 10631)
l = l - 10631 * n + 354
j = (int((10985 - l) / 5316)) * (int((50 * l) / 17719)) + (int(l / 5670)) * (int((43 * l) / 15238))
l = l - (int((30 - j) / 15)) * (int((17719 * j) / 50)) - (int(j / 16)) * (int((15238 * j) / 43)) + 29
month = int((24 * l) / 709)
day = l - int((709 * month) / 24)
year = 30 * n + j - 30
return HijriDate(year=year, month=month, day=day)
def to_gregorian(hijri_date: HijriDate) -> date:
"""تحويل تاريخ هجري إلى ميلادي (تقريبي)"""
# Placeholder - would use hijri-converter library in production
base = date(622, 7, 16) # 1 محرم 1 هـ
days = (hijri_date.year - 1) * 354 + (hijri_date.month - 1) * 29 + hijri_date.day
return base + timedelta(days=int(days * 0.97))
if __name__ == "__main__":
today_hijri = to_hijri("2026-08-05")
print(f"اليوم: {today_hijri.format()}")
print(f"الأشهر الهجرية: {', '.join(HIJRI_MONTHS)}")