من شخصا همیشه با این تبدیل مشکل داشتم. هزار جور الگوریتم و نظریه و کد و … دیده بودم و از همشون هم استفاده کردم. همشون هم برخلاف ادعای نویسنده با سال های کبیسه مشکل داشتن. تا اینکه برخورد کردم به یه الگوریتم که روش محاسبه تاریخ رو در اکسل شرح داده بود. از اون الگوریتم استفاده کردم و این کانورتور رو حدود یک سال و نیم پیش نوشتم و ازش استفاده کردم تا به امروز.

تا الان که درست جواب داده و من هم ازش راضیم. کد هسته اصلی هم اینه:
<%
Function FLOOR(My_Num)
the_Int = INT (My_Num)
if the_Int> My_Num then the_Int = the_Int -1
FLOOR=the_Int
End Function
//Selecting a Date to Convert : Today is Selected
Date_to_Convert = date()
//Calculating No. of Days from 1/1/1900 until now
days_until_today=datediff(“d”,01/01/1900,date())
// Defining This Jalali Year: Easy Formula Based on Excel Calculation
Jalali_Year_Val=int((days_until_today-7358)/365.25)+1299
// This Block Calculates Jalali Month Value
// Start of Block
Var0=days_until_today-7385
If INT(((Var0)*100 mod 36525)/100)<186 then
Var1= INT(INT(((Var0)*100 mod 36525)/100)/31)
Else
IF (INT((Var0)/365.25) mod 4)=0 then
Var1= INT((INT(((Var0)*100 mod 36525)/100)-186)/30)+6
Else
IF INT(((Var0)*100 mod 36525)/100)<336 then
Var1= INT((INT(((Var0)*100 mod 36525)/100)-186)/30)+6
Else
INT((INT(((Var0)*100 mod 36525)/100)-336)/29)+11
End if
End if
End if
Jalali_Month_Val= (Var1 mod 12)+1
// End of Block
// This Block Calculates Jalali Day Value
// Start of Block
IF INT((Var0*100 mod 36525)/100)<186 then
Var1=(INT((Var0*100 mod 36525)/100) mod 31)+1
Else
IF (INT(Var0/365.25) mod 4)=0 then
Var1=(INT(((Var0*100 mod 36525)/100)-186) mod 30)+1
Else
IF INT((Var0*100 mod 36525)/100)<336 then
Var1=(INT(((Var0*100 mod 36525)/100)-186) mod 30)+1
Else
Var1= (INT(((Var0*100 mod 36525)/100)-336) mod 29)+1
End if
End if
End if
Jalali_Day_Val=Var1
// End of Block
// Final Step
// Echo
Jalali_Date_String = Jalali_Day_Val&” / “&Jalali_Month_Val&” / “&Jalali_Year_Val
Response.Write “<p dir=rtl>”&Jalali_Date_String&”<BR></p>”
%>
این کانورتور به ASP هست و خیلی ساده که با کمی دستکاری و تغییر می تونین قشنگترش کنید یا تبدیلش کنید به PHP یا VB یا هر چیز دیگه و ازش استفاده کنید.
Share this Post





