لا يمكن أن نصل إلى تحويل للتاريخ بمعادلة من سطر واحد وباستخدام المتوسطات.
ما عملته أنا فقط للحصول على السنة الهجرية ليس إلا ، فلا يذهب تعبكم سدى ، فالتقاويم لها قوانين وتفاصيل كثيرة مثل مدد الشهور ونطام الدورات والكبس.
هذه دالة فحصي للمعادلة لمن يريد أن يكثر من الاختبارات واللعب على قيمة الضبط:
Sub HijriYearTest()
Dim Hyy As Long
Dim Days As Long
Dim Greg As Long
Dim Hijri1 As Long
Dim Hijri2 As Double
For Hyy = 1 To 9666
Greg = Hijri2Greg(Hyy, 1, 1)
For Days = Greg - 1 To Greg
Hijri1 = Left(Greg2Hijri(CDate(Days)), 4)
'Hijri2 = (Days + 466580.47) / 354.366666666667 + 1
Hijri2 = (Days + 466581 - 0.53) / (10631 / 30) + 1
If Hijri1 <> Fix(Hijri2) Then
Debug.Print CDate(Days), Hijri1, Hijri2
End If
Next Days
Next Hyy
Debug.Print "Done"
End Sub