PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تبدیل تاریخ میلادی به شمسی



admin
23 / December / 2012, 04:06 PM
اینم یک تابع واسه تبدیل تاریخ به شمسی

کد:




Function MiladiToShamsi(var Year, Month, Day: Word): String;
const
count_days : array[1..12] of Byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
i: Byte;
st: String;
day_year: Integer;
begin
day_year:= 0;
for i:= 1 to month - 1 do
day_year:= day_year + count_days;
day_year:= day_year + day;

if IsLeapYear(Year) and (month > 2) then
Inc(day_year);

if (day_year <= 79) then
begin
if ((Year - 1) mod 4 = 0) then
day_year:= day_year + 11
else
day_year:= day_year + 10;

Year:= Year - 622;

if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 9;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 10;
Day:= day_year mod 30;
end;
end
else
begin
year:= year - 621;

day_year:= day_year - 79;
if (day_year <= 186) then
begin
if (day_year mod 31 = 0) then
begin
Month:= (day_year div 31);
Day:= 31;
end
else
begin
Month:= (day_year div 31) + 1;
Day:= day_year mod 31;
end;
end
else
begin
day_year:= day_year - 186;
if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 6;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 7;
Day:= day_year mod 30;
end;
end;
end; // else .

st:= IntToStr(Year) + &quot;/&quot;;
if (Month < 10) then
st:= st + &quot;0&quot;;
st:= st + IntToStr(Month) + &quot;/&quot;;
if (Day < 10) then
st:= st + &quot;0&quot;;
st:= st + IntToStr(Day);

Result:= st;
end;

talaptolop
24 / December / 2012, 12:16 AM
نقل قول از admin
اینم یک تابع واسه تبدیل تاریخ به شمسی

کد:




Function MiladiToShamsi(var Year, Month, Day: Word): String;
const
*count_days : array[1..12] of Byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
*i: Byte;
*st: String;
*day_year: Integer;
begin
*day_year:= 0;
*for i:= 1 to month - 1 do
* *day_year:= day_year + count_days;
*day_year:= day_year + day;

*if IsLeapYear(Year) and (month > 2) then
* *Inc(day_year);

*if (day_year <= 79) then
*begin
* *if ((Year - 1) mod 4 = 0) then
* * *day_year:= day_year + 11
* *else
* * *day_year:= day_year + 10;

* *Year:= Year - 622;

* *if (day_year mod 30 = 0) then
* *begin
* * *Month:= (day_year div 30) + 9;
* * *Day:= 30;
* *end
* *else
* *begin
* * *Month:= (day_year div 30) + 10;
* * *Day:= day_year mod 30;
* *end;
*end
*else
*begin
* *year:= year - 621;

* *day_year:= day_year - 79;
* *if (day_year <= 186) then
* *begin
* * *if (day_year mod 31 = 0) then
* * *begin
* * * *Month:= (day_year div 31);
* * * *Day:= 31;
* * *end
* * *else
* * *begin
* * * *Month:= (day_year div 31) + 1;
* * * *Day:= day_year mod 31;
* * *end;
* *end
* *else
* *begin
* * *day_year:= day_year - 186;
* * *if (day_year mod 30 = 0) then
* * *begin
* * * *Month:= (day_year div 30) + 6;
* * * *Day:= 30;
* * *end
* * *else
* * *begin
* * * *Month:= (day_year div 30) + 7;
* * * *Day:= day_year mod 30;
* * *end;
* *end;
*end; * // else *.

*st:= IntToStr(Year) + &quot;/&quot;;
*if (Month < 10) then
* *st:= st + &quot;0&quot;;
*st:= st + IntToStr(Month) + &quot;/&quot;;
*if (Day < 10) then
* *st:= st + &quot;0&quot;;
*st:= st + IntToStr(Day);

*Result:= st;
end;








_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ _ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ _ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ _ــ_ــ_ــ_ــ_ــ_ــ_ــ_

talaptolop
24 / December / 2012, 12:20 AM
نقل قول از admin
اینم یک تابع واسه تبدیل تاریخ به شمسی

کد:




Function MiladiToShamsi(var Year, Month, Day: Word): String;
const
*count_days : array[1..12] of Byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
*i: Byte;
*st: String;
*day_year: Integer;
begin
*day_year:= 0;
*for i:= 1 to month - 1 do
* *day_year:= day_year + count_days;
*day_year:= day_year + day;

*if IsLeapYear(Year) and (month > 2) then
* *Inc(day_year);

*if (day_year <= 79) then
*begin
* *if ((Year - 1) mod 4 = 0) then
* * *day_year:= day_year + 11
* *else
* * *day_year:= day_year + 10;

* *Year:= Year - 622;

* *if (day_year mod 30 = 0) then
* *begin
* * *Month:= (day_year div 30) + 9;
* * *Day:= 30;
* *end
* *else
* *begin
* * *Month:= (day_year div 30) + 10;
* * *Day:= day_year mod 30;
* *end;
*end
*else
*begin
* *year:= year - 621;

* *day_year:= day_year - 79;
* *if (day_year <= 186) then
* *begin
* * *if (day_year mod 31 = 0) then
* * *begin
* * * *Month:= (day_year div 31);
* * * *Day:= 31;
* * *end
* * *else
* * *begin
* * * *Month:= (day_year div 31) + 1;
* * * *Day:= day_year mod 31;
* * *end;
* *end
* *else
* *begin
* * *day_year:= day_year - 186;
* * *if (day_year mod 30 = 0) then
* * *begin
* * * *Month:= (day_year div 30) + 6;
* * * *Day:= 30;
* * *end
* * *else
* * *begin
* * * *Month:= (day_year div 30) + 7;
* * * *Day:= day_year mod 30;
* * *end;
* *end;
*end; * // else *.

*st:= IntToStr(Year) + &quot;/&quot;;
*if (Month < 10) then
* *st:= st + &quot;0&quot;;
*st:= st + IntToStr(Month) + &quot;/&quot;;
*if (Day < 10) then
* *st:= st + &quot;0&quot;;
*st:= st + IntToStr(Day);

*Result:= st;
end;









ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_
ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_
ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_
سلام خسته نباشین خیلی سایت باحالیه خیلی چیز یادگرفتم
من مبتدی ام خیلی از دلفی سردر نمیارم نیاز مبرم هم به استفاده از تاریخ
شمسی تو یه برنامه دارم چندجا این تابع رو دیدم ولی نمیفهمم چطوری ازش
استفاده کنم.......!<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>
آخه فقط بلدم روی یه شی کد بنویسم این کد رو نمیفهمم کجا و چجوری کپی کنم.....!<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>
ممنون میشم کامل و واضح حالیم کنین<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>
ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_
ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_
ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ــ_ ــ_ــ_ــ_ــ_ــ_ــ_

admin
25 / December / 2012, 01:14 AM
سلام کاربر talaptolop (<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>)* و مرسی از* نظر لطفتون.
این یک تابع برای تبدیل تاریخ میلادی به شمسیه ، کافیه* این رو در قسمت بالای یونیت اتون یعنی بعد از* implementation
کپی کنید و در هر قسمت از کدتون فقط این رو به صورت زیر صدا بزنید .
مثال :
تبدیل 2013/12/01 به شمسی
کد:


MiladiToShamsi(2013,12,01);

meyti
19 / January / 2013, 08:06 PM
با اجازه از مدیر عزیز :
1- این تابع تست شد و یه ایراد کوچک داشت . اونم یه * &quot; [* i* ] &quot; * در آخر خط 11 کم داشت . البته شما درست کد رو گذاشتید ولی سایت اون رو نشان نمیده .


تابع اصلاح شده :

کد:



Function MiladiToShamsi(var Year, Month, Day: Word): String;
const
count_days : array[1..12] of Byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
i: Byte;
st: String;
day_year: Integer;
begin
day_year:= 0;
for i:= 1 to month - 1 do
day_year:= day_year + count_days[ i ] ;

day_year:= day_year + day;

if IsLeapYear(Year) and (month > 2) then
Inc(day_year);

if (day_year <= 79) then
begin
if ((Year - 1) mod 4 = 0) then
day_year:= day_year + 11
else
day_year:= day_year + 10;

Year:= Year - 622;

if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 9;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 10;
Day:= day_year mod 30;
end;
end
else
begin
year:= year - 621;

day_year:= day_year - 79;
if (day_year <= 186) then
begin
if (day_year mod 31 = 0) then
begin
Month:= (day_year div 31);
Day:= 31;
end
else
begin
Month:= (day_year div 31) + 1;
Day:= day_year mod 31;
end;
end
else
begin
day_year:= day_year - 186;
if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 6;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 7;
Day:= day_year mod 30;
end;
end;
end; // else .

st:= IntToStr(Year) + &quot;/&quot;;
if (Month < 10) then
st:= st + &quot;0&quot;;
st:= st + IntToStr(Month) + &quot;/&quot;;
if (Day < 10) then
st:= st + &quot;0&quot;;
st:= st + IntToStr(Day);

Result:= st;
end;





2-چون پارامترهای ورودی تابع باید به صورت متغیر باشه ، فراخوانی تابع باید با متغییر و به صورت زیر باشه .

کد:



v1:=2014;
v2:=1;
v3:=22;
label1.caption:=MiladiToShamsi(v1,v2,v3);

meyti
19 / January / 2013, 08:23 PM
البته اگه کمی تابع رو تغییر بدیم فراخوانی اون راحتتر میشه :

کد:




Function MiladiToShamsi(date1:TDate): String;
const
count_days : array[1..12] of Byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var

Year, Month, Day: Word ;
i: Byte;
st,strtemp: String;
day_year: Integer;

begin

strtemp:=datetostr(date1);
Year:=strtoint(copy(strtemp,1,4));
Month:=strtoint(copy(strtemp,6,2));
Day:=strtoint(copy(strtemp,9,2));


day_year:= 0;
for i:= 1 to month - 1 do
day_year:= day_year + count_days [ i ] ;
day_year:= day_year + day;

if IsLeapYear(Year) and (month > 2) then
Inc(day_year);

if (day_year <= 79) then
begin
if ((Year - 1) mod 4 = 0) then
day_year:= day_year + 11
else
day_year:= day_year + 10;

Year:= Year - 622;

if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 9;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 10;
Day:= day_year mod 30;
end;
end
else
begin
year:= year - 621;

day_year:= day_year - 79;
if (day_year <= 186) then
begin
if (day_year mod 31 = 0) then
begin
Month:= (day_year div 31);
Day:= 31;
end
else
begin
Month:= (day_year div 31) + 1;
Day:= day_year mod 31;
end;
end
else
begin
day_year:= day_year - 186;
if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 6;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 7;
Day:= day_year mod 30;
end;
end;
end; // else .

st:= IntToStr(Year) + &quot;/&quot;;
if (Month < 10) then
st:= st + &quot;0&quot;;
st:= st + IntToStr(Month) + &quot;/&quot;;
if (Day < 10) then
st:= st + &quot;0&quot;;
st:= st + IntToStr(Day);

Result:= st;
end;






فراخوانی :

کد:



Label1.Caption:=MiladiToShamsi(date);

admin
20 / January / 2013, 03:01 AM
سلام* و درود خدمت مدیر meyti (<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>)

روشتون روش خوبیه* البته یه ایراد کوچولو داره ، اون هم مربوط به کد نویسی شما نیست، مربوط به فرمت تاریخ میلادیه.
اگر کاربر* تاریخ رو از سیستم گرفت و سیستم هم تاریخ رو به صورت زیر یعنی :

2011/30/10
یا
30/10/2011
بهش بده باید چیکار کرد ؟
دیگه اون موقع کاراکتر 1 تا 4 ممکنه سال نباشه و ...
در هر صورت مرسی از خلاقیت و پشتکار شما مدیر عزیز.
موفق و موید باشید

meyti
20 / January / 2013, 08:29 PM
به اینجاش فکر نکرده بودم ولی با دستور زیر درست میشه و فرمت به هر صورتی باشه درست عمل میکنه :

کد:



strtemp:=FormatDateTime(&quot;yyyy/mm/dd&quot;, date1);






کد:



Function MiladiToShamsi(date1:TDate): String;
const
count_days : array[1..12] of Byte = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var

Year, Month, Day: Word ;
i: Byte;
st,strtemp: String;
day_year: Integer;

begin

strtemp:=FormatDateTime(&quot;yyyy/mm/dd&quot;, date1);

Year:=strtoint(copy(strtemp,1,4));
Month:=strtoint(copy(strtemp,6,2));
Day:=strtoint(copy(strtemp,9,2));


day_year:= 0;
for i:= 1 to month - 1 do
day_year:= day_year + count_days [ i ] ;
day_year:= day_year + day;

if IsLeapYear(Year) and (month > 2) then
Inc(day_year);

if (day_year <= 79) then
begin
if ((Year - 1) mod 4 = 0) then
day_year:= day_year + 11
else
day_year:= day_year + 10;

Year:= Year - 622;

if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 9;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 10;
Day:= day_year mod 30;
end;
end
else
begin
year:= year - 621;

day_year:= day_year - 79;
if (day_year <= 186) then
begin
if (day_year mod 31 = 0) then
begin
Month:= (day_year div 31);
Day:= 31;
end
else
begin
Month:= (day_year div 31) + 1;
Day:= day_year mod 31;
end;
end
else
begin
day_year:= day_year - 186;
if (day_year mod 30 = 0) then
begin
Month:= (day_year div 30) + 6;
Day:= 30;
end
else
begin
Month:= (day_year div 30) + 7;
Day:= day_year mod 30;
end;
end;
end; // else .

st:= IntToStr(Year) + &quot;/&quot;;
if (Month < 10) then
st:= st + &quot;0&quot;;
st:= st + IntToStr(Month) + &quot;/&quot;;
if (Day < 10) then
st:= st + &quot;0&quot;;
st:= st + IntToStr(Day);

Result:= st;
end;

sanazgh
24 / January / 2013, 01:01 PM
وووواااااااای که نمیدوننین خودتون (
meyti (<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>)*و*

admin (<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>)

*
)چقدر بزرگوارین و خوووووووووووووووووووووووو وووب . ممنون مرسی مشکلم حل شد*<span style="font-family: trebuchet ms"><font size="3"><font color="Indigo"><b><font color="red">[فقط اعضاء انجمن قادر به مشاهده لینکها و عکسها می باشند <a href="/reg_iran.php" target="_blank">برای عضویت در سایت کلیک کنید</a>]</font></b></font></font></span>




* * * * * * * * * * * * * * * * * * * * * * * * * * * * *

b_e_shamlu
13 / October / 2013, 10:40 PM
راستی کامپوننت تاریخ را در قسمت کامپوننت ها آپلود کردم خیلی خوبه میتونی خیلی کارها کرد مثل تقویم هجری با تمامی رویدادها

meyti
14 / April / 2016, 12:56 PM
با سلام
کد بالا به مشکل برخورده و برای تاریخ 25 / 1 / 95 و به بعد درست کار نمیکنه . !!!
جالبه که کامپوننت i18n هم دقیقا همین اشتباه رو داره ! :(:(

admin
14 / April / 2016, 10:44 PM
با سلام
کد بالا به مشکل برخورده و برای تاریخ 25 / 1 / 95 و به بعد درست کار نمیکنه . !!!
جالبه که کامپوننت i18n هم دقیقا همین اشتباه رو داره ! :(:(

چه مشکلی ؟؟؟
من چک کردم و هیچ مشکلی ندیدم ...

meyti
16 / April / 2016, 09:59 AM
چه مشکلی ؟؟؟
من چک کردم و هیچ مشکلی ندیدم ...

;););)
معذرت اشتباه از من بود - تاریخ سیستم اشتباه بود !!

med0098
12 / July / 2018, 11:00 AM
با سلام
لطفا در مورد کد ذیل توضیحاتی بدید ممنون می شم
strtemp:=FormatDateTime(&quot;yyyy/mm/dd&quot;, date1);
این yyyy/mm/dd در کجای برنامه تعریف شده
کی از Quot استفاده می شه؟