delphi4arab منتديات دلفي للعرب
دالة التحويل من التاريخ الميلادي إلي التاريخ الهجري. - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : مصادر دلفي مفتوحة تعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=14)
+--- الموضوع : دالة التحويل من التاريخ الميلادي إلي التاريخ الهجري. (/showthread.php?tid=2899)



دالة التحويل من التاريخ الميلادي إلي التاريخ الهجري. - بن دهيبة - 17-03-2011

بسم الله الرحمن الرحيم، وصلاة وسلام على رسول الله محمد صلي الله عليه وسلم.
دالة التحويل من التاريخ الميلادي إلي التاريخ الهجري.
الملف في المرفقات.
كود :
function DateToHijer(day:word;month:word;year:word):string; var ayear,cdays,leap,HMO,cmonth:word; myear,cyear,cday,HDAY,Precise,mday:real; function Pcision(F:real):real; var Status :boolean; Dn :integer; jDn,Fn,Fn2 :real; function Moon(jd:real):real; var T,mE,mA,SmA,D,S,M,phaseAngle,iiF:real; function r(Input:real):real; var Output : real; Begin if (Input>=0) Then Output := Input-Floor(Input/360)*360 else Output := Input-Ceil((Input/360)*360+360); Result := (Output); End; function radd(angle:real):real; Begin Result :=(r(angle)*PI/180); End; function sinn(angle:real):real; Begin Result :=(sin(radd(angle))); End; function coss(angle:real):real; Begin Result := (cos(radd(angle))); End; Begin T := (jd-2451545)/36525.0; mE := 297.8502042+445267.1115168*T-0.0016300*(T*T)+(T*T*T)/545868.0-(T*T*T*T)/113065000; mA := 134.9634114+477198.8676313*T+0.0089970*(T*T)+(T*T*T)/69699.0-(T*T*T*T)/863310000.0; SmA := 357.5291092+(35999.0502909*T)-(0.0001536*T*T)+((T*T*T)/24490000); D := r(mE); S := r(SmA); M := r(mA); phaseAngle := 180-D-6.289*sinn(M)+2.1*sinn(S)-1.274*sinn(r(2*D)-M)-0.658*sinn(2*D); phaseAngle :=phaseAngle + (-0.214*sinn(2*M)); phaseAngle :=phaseAngle + (-0.110*sinn(1*D)); iiF := (1+coss(phaseAngle))/2*(phaseAngle/abs(phaseAngle)); Result :=(iiF); End; Begin Status :=true; Dn := 0; jDn := F; if (Moon(jDn-1)<=0) Then Begin jDn :=jDn- 1; Dn :=Dn+ 1; End; while (Status = true) do Begin Fn := Moon(jDn); Fn2 := Moon(jDn-1); if (((Fn/abs(Fn))*(Fn2/abs(Fn2))) = 1) Then Begin Dn :=Dn + 1; jDn :=jDn - 1; End else Begin if (abs(Fn*Fn2)< 0.2) Then Status :=false else Begin Dn :=Dn + 1; jDn :=jDn - 1; End; End; End; Result :=(Dn); End; procedure call(HdayN:real); var Gyear,GyearDf,Hyear,Hdayf,Hhday :real; l,Hmonth :word; Gday :integer; Begin Gyear := cyear*0.970224044+621.574981435; GyearDf := Gyear-Floor(Gyear); Gyear :=Gyear- GyearDf; l := 0; if (Gyear/4 = Floor(Gyear/4)) Then Begin l := 1; End; if (Gyear/100 = Floor(Gyear/100)) Then Begin if (Gyear/400 <> Floor(Gyear/400)) Then Begin l := 0; End; End; Gday := Floor((365+l)*GyearDf)+1; Gyear :=Gyear+ Gday/(365+l); Hyear := (Gyear-621.574981435)/0.970224044; Hdayf := Hyear-Floor(Hyear); Hhday := Hdayf*10631/30+1; Hmonth := 1; HdayF := 1; while (HdayF<HdayN) Do Begin Hhday :=Hhday+ 1; HdayF :=HdayF+ 1; if (Hhday>=29.53058796) Then Begin Hhday := Hhday-29.53058796; Hmonth :=Hmonth+ 1; End; End; HDAY := Floor(Hhday)+1; HMO := Hmonth; End; function JulianDay(gYear:integer; gMonth:word; gDay:word):real; var dayAndTime,jdd:real; A:integer; Begin if (gMonth<=2) Then Begin gYear:=gYear-1; gMonth :=gMonth + 12; End; A := Floor(gYear/100); A := Floor(2-A+(A/4)); dayAndTime := gDay+0.8125; jdd:=Floor(365.25*(gYear+4712))+Floor(30.6001*(gMonth+1))+dayAndTime+A-63.5; Result := (jdd); End; Begin ayear := year; cdays := day; leap := 0; if (month>11) then cdays:=cdays+30; if (month>10) then cdays:=cdays+31; if (month>9) then cdays:=cdays+30; if (month>8) then cdays:=cdays+31; if (month>7) then cdays:=cdays+31; if (month>6) then cdays:=cdays+30; if (month>5) then cdays:=cdays+31; if (month>4) then cdays:=cdays+30; if (month>3) then cdays:=cdays+31; if (month>2) then cdays:=cdays+28; if (month>1) then cdays:=cdays+31; if (ayear/4 = Floor(ayear/4)) Then leap := 1; if (ayear/100 = Floor(ayear/100)) Then if (ayear/400 <> Floor(ayear/400)) Then leap := 0; if (leap = 1) Then if (month>2) Then cdays :=cdays+ 1; myear := ayear+cdays/(365+leap); cyear := (myear-621.578082192)/0.97022298; cyear :=cyear+ Floor(abs(cyear)/3000)*30/10631; cday := cyear-Floor(cyear); cyear := cyear-cday; if ((cday*10631/30)-Floor(cday*10631/30)<0.5) Then cday := Floor(cday*10631/30)+1 else cday := Floor(cday*10631/30)+2; call(cday); mday := HDAY; cmonth := HMO; if (cmonth = 13) Then Begin month := 1; cyear :=cyear+ 1; End; Precise := Pcision(JulianDay(ayear, month, day)); if (mday <> Precise) Then Begin if (mday = 1 ) AND ( Precise > 28) Then Begin cmonth :=cmonth- 1; if (cmonth = 0) Then Begin cmonth := 12; cyear :=cyear- 1; End; End else Begin if (mday>28) AND ( Precise<3) Then Begin cmonth :=cmonth+ 1; if (cmonth = 13) Then Begin cmonth := 1; cyear :=cyear +1; End; End; End; End; mday := Precise; if (cyear<1) Then Begin cyear :=cyear- 1; End; Result := floattostr( mday)+'/' + inttostr(cmonth)+'/' + floattostr( abs(cyear)) End; procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption:=DateToHijer(17,03,2011); end;



دالة التحويل من التاريخ الميلادي إلي التاريخ الهجري. - azl2846 - 25-04-2011

مشكور على الجهد... جاري التجربة


دالة التحويل من التاريخ الميلادي إلي التاريخ الهجري. - khalmoh1971 - 29-05-2011

شكر جدا
عدلت كود التنفيذ
كود :
procedure TForm1.Button1Click(Sender: TObject); var Year, Month, Day: Word; begin DecodeDate(DateTimePicker1.Date, Year, Month, Day); Label1.Caption:= DateToHijer( Day, Month, Year) ; edit4.Text:= DateToHijer( Day, Month, Year) ; end;



دالة التحويل من التاريخ الميلادي إلي التاريخ الهجري. - بن دهيبة - 01-10-2011

هل يمكن جعل التاريخ الهجري يظهر مع التاريخ الخاص بالونداوز حيث تظهر الساعة