Function HijriToMiladi(HijriDate : String;DateType : Integer) : String;
var
jy, jm, jd, Hd, Gd,y ,m, tmp, jmmm, jddd, jyyy : string;
c : Integer;
MiladiMonths : array[1..12] of String;
{ If HijriDate = NULL Then Exit;
If Len(HijriDate) < 10 Then
MsgBox "تاریخ وارد شده، اشتباه می باشد
Exit Function
End If}
//1382/02/03
begin
jy := Copy(HijriDate,1,4);
jm := copy(HijriDate, 6, 2);
If (Length(jm) = 1) then
jm := '0' + jm
else
jm := jm;
jd := copy(HijriDate,9,2);
if (copy(jd,1,1) = '/' ) then
jd := '0' + copy(jd,2,1)
else
jd := jd;
// 'jd = IIf(Len(jd) = 1, "0" & jd, jd)
HD := jy + '/' + jm + '/' + jd;
Case StrToInt(jm) of
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 :
begin
m := IntToStr(StrToInt(jm) + 2);
Y := IntToStr(StrToInt(jy) + 621);
end;
11, 12 :
begin
m := '0' + copy(jm,2,1);
Y := IntToStr(StrToInt(jy) + 622);
end
End;//case
GD := Y + '/' + m + '/01';
//' GD = Y & "/01/01"
c := 0;
While True do
begin
tmp := GD;
If HD = MiladiToHejri(GD,0) Then
break;
// GD := DateAdd('d', 1, GD);
GD := DateToStr(strtoDate(tmp)+ 1);
c := c + 1;
If c > 1000 Then
begin
// ' MsgBox "Date conversion error. Please check entered date.", vbCritical, "Error"
HijriToMiladi := '. تاریخ وارد شده، اشتباه می باشد ';
Exit;
end;
end;//while
MiladiMonths[1] := 'January';
MiladiMonths[2] := 'February';
MiladiMonths[3] := 'March';
MiladiMonths[4] := 'April';
MiladiMonths[5] := 'May';
MiladiMonths[6] := 'June';
MiladiMonths[7] := 'July';
MiladiMonths[8] := 'August';
MiladiMonths[9] := 'September';
MiladiMonths[10] := 'October';
MiladiMonths[11] := 'November';
MiladiMonths[12] := 'December';
Case DateType of
0:
HijriToMiladi := GD;
1:
begin
jyyy := copy(GD,1,4);
jmmm := copy(GD,6,2);
if (copy(jmmm,2,1) = '/' ) then
jmmm := '0' + copy(jmmm,1,1)
else
jmmm := jmmm;
jddd := copy(GD,Length(GD)-1,2);
if (copy(jddd,1,1) = '/' ) then
jddd := '0' + copy(jddd,2,1)
else
jddd := jddd;
HijriToMiladi := IntToStr(strtoint(jddd))+'th of' + ' ' + MiladiMonths[StrToInt(jmmm)] + ' '+jyyy;
end;
End;
End;