Update hijri.py

هذا الالتزام موجود في:
2026-08-05 10:30:53 +00:00
الأصل 862f902cda
التزام 10d9883550

عرض الملف

@@ -1,55 +1,22 @@
"""Hijri Calendar Library - مكتبة التقويم الهجري"""
from datetime import date, timedelta
from datetime import date
# أم القرى - أشهر التقويم الهجري
HIJRI_MONTHS = [
"محرم", "صفر", "ربيع الأول", "ربيع الثاني",
"جمادى الأولى", "جمادى الآخرة", "رجب",
"شعبان", "رمضان", "شوال", "ذو القعدة", "ذو الحجة"
]
GREGORIAN_MONTHS = [
"يناير", "فبراير", "مارس", "إبريل", "مايو", "يونيو",
"يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"
]
HIJRI=['Muharram','Safar','Rabi I','Rabi II','Jumada I','Jumada II','Rajab','Shaban','Ramadan','Shawwal','Dhul Qadah','Dhul Hijjah']
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()
def __init__(self,y,m,d): self.y,self.m,self.d=y,m,d
def format(self): return f'{self.d} {HIJRI[self.m-1]} {self.y} AH'
# 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_hijri(gs):
g=date.fromisoformat(gs)
jd=int(g.toordinal())+1721425
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
m=int((24*l)/709)
d=l-int((709*m)/24)
y=30*n+j-30
return HijriDate(y,m,d)
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)}")
if __name__=='__main__': print(to_hijri('2026-08-05').format())