نمایش نتایج 1 تا 11 از 11

نام تاپیک: تبدیل زمان و تاریخ در FastReport

  1. #1

    تبدیل زمان و تاریخ در FastReport

    در محیط Design فست ریپورت دارم کد نویسی میکنم
    ساعت را به شکل am و pm نشون میده ، اما من نمیخوام اینجوری باشه مثلا 07:00 ق.ظ را باید به 19:00 تبدیل کنم ، همینطور باید تاریخ میلادی را به شمسی تبدیل کنم چکار کنم ؟

  2. #2

    نقل قول: تبدیل زمان و تاریخ در FastReport

    ساعت را به شکل am و pm نشون میده ، اما من نمیخوام اینجوری باشه مثلا 07:00 ق.ظ را باید به 19:00 تبدیل کنم
    روی کنترل نمایش دهنده متن دابل کلیک کنید، در پنجره باز شده، به تب Format برید، گروه Date\Time را انتخاب کنید، و Format string را روی hh:mm تنظیم کنید.

    همینطور باید تاریخ میلادی را به شمسی تبدیل کنم چکار کنم ؟
    باید یه تابع تبدیل تاریخ میلادی به شمسی بنویسید. دلفی یا فست ریپورت به خودی خود تاریخ میلادی شما را تبدیل به شمسی نمی کنند.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  3. #3

    نقل قول: تبدیل زمان و تاریخ در FastReport

    مرسی توی دلفی از کامپوننت برای تبدیل تاریخ استفاده میکردم اینجا چی ؟! خوب حتما یکی قبلا این تابع را نوشته دیگه

  4. #4

    نقل قول: تبدیل زمان و تاریخ در FastReport

    توی دلفی از کامپوننت برای تبدیل تاریخ استفاده میکردم اینجا چی ؟! خوب حتما یکی قبلا این تابع را نوشته دیگه
    راه های مختلفی برای تبدیل وجود دارند، شامل:

    1- ایجاد یک فیلد Calculated در دیتاست، و تبدیل مقدار فیلد تاریخ میلادی به شمسی توسط یک تابع یا کامپوننت یا هر چیز دیگه، و قرار دادن نتیجه در داخل این فیلد. اینطوری اون فیلد محاسباتی در فست ریپورت هم در دسترس خواهد بود.
    2- استفاده از رویدادهای OnSetText و OnGetText فیلد تاریخ مربوطه، برای تبدیل تاریخ میلادی به شمسی و بالعکس.
    3- رجیستر کردن یک تابع آماده تبدیل تاریخ میلادی به شمسی دلفی در موتور اسکریپت فست ریپورت، و فراخوانی آن تابع در داخل فست ریپورت.
    4- نوشتن یک تابع تبدیل میلادی به شمسی با استفاده از PascalScript در داخل فست ریپورت.
    5- در صورتی که از بانک اطلاعاتی استفاده می کنید که امکان تعریف توابع کاربر را داره (مثل MS SQL Server)؛ تعریف یک تابع کاربر در بانک اطلاعاتی، برای تبدیل تاریخ میلادی به شمسی. البته این حالت بیشتر به درد زمانی میخوره که مقدار اون فیلد که توسط کوئری برگشت داده میشه، فقط-خواندنی باشه، و قصد نداشته باشید که مقدارش را در برنامه تغییر بدید.

    برای هر کدوم از حالت های فوق (به غیر از حالت 4) در این سایت تاپیک هایی وجود داره.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  5. #5

    نقل قول: تبدیل زمان و تاریخ در FastReport

    مرسی مشکل اینجاست که برنامه مال من نیست و فقط یک فایل اجرایی دارم توی برنامه میشه گزارش خصوصی درست کرد که با محیط فست ریپورت هست پس باید از همون گزینه 4 استفاده کنم ! بانک هم اکسس

  6. #6

    نقل قول: تبدیل زمان و تاریخ در FastReport

    کسی تابع تبدیل تاریخ میلادی به شمسی را نداره ؟

  7. #7
    کاربر دائمی آواتار hossein_h62
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    اصفهـــــان
    پست
    720

    نقل قول: تبدیل زمان و تاریخ در FastReport

    اینم از تایع تاریخ شمسی :
    Function SHDate:String;
    Const
    D : Array [0..11] of integer=(20, 19, 20, 20, 21, 21, 22, 22, 22, 22, 21, 21);
    P : Array [0..11] of integer=(11, 12, 10, 12, 11, 11, 10, 10, 10, 9, 10, 10);
    Mon: Array [0..11]of String=('01','02','03','04','05','06','07','08','0 9','10','11','12');
    Var DateLocal:_SYSTEMTIME;
    Dm,Mm,Ym:Word;
    P1,D1,I,U,Rp,Ys,Ms,Ds,X:Integer;
    Sal,Mah,Roz:String;
    begin
    GetLocalTime(DateLocal);
    Ym:=DateLocal.wYear;
    Mm:=DateLocal.wMonth;
    Dm:=DateLocal.wDay;
    Dm := Dm;
    U := 0;
    Rp:= 0;
    If (Ym Mod 4) = 0 Then U := 1;
    If ((Ym Mod 100 = 0) AND (Ym Mod 400 <> 0)) Then U := 0;
    Ys := Ym - 622;
    X := Ys - 22;
    X := X Mod 33;
    If ((X Mod 4 = 0) AND (X <> 32)) Then Rp := 1;
    I := Not(Rp-2) + NOT(U - 2) * 2;
    X := 0;
    If (I = 0) AND (Mm = 3) Then X := 1;
    If I = 0 Then I := 3;
    Ms := (9 + Mm) Mod 13;
    If Ms < 10 Then Ms := Ms + 1;
    D1 := D[Mm - 1];
    If (I = 1) AND (Mm > 2) Then D1 := D1 - 1;
    If (I = 2) AND (Mm < 3) then D1 := D1 - 1;
    P1 := P[Mm - 1];
    If (I = 1) AND (Mm > 2) Then P1 := P1 + 1;
    If (I = 2) AND (Mm < 4) Then P1 := P1 + 1;
    If (Dm > 0) AND (Dm <= D1) Then
    Begin
    Ds := P1 + Dm + X - 1;
    X := 1;
    End
    Else
    Begin
    Ds := Dm - D1;
    Ms := Ms + 1;
    If Ms = 13 Then Ms := 1;
    X := 2;
    End;
    If ((Mm = 3) AND (X = 2)) OR (Mm > 3) Then Ys := Ys + 1;
    Sal:=IntToStr(Ys);
    If Length(Sal)=1 then Insert('0',Sal,1);
    Mah:=Mon[Ms-1];
    Roz:=IntToStr(Ds);
    If Length(Roz)=1 then Insert('0',Roz,1);
    Result:=Sal+'/'+Mah+'/'+Roz;
    Delete(Result,1,2);
    end;

  8. #8

    نقل قول: تبدیل زمان و تاریخ در FastReport

    مرسی توی فست ریپورت نوشتم به خط 3 ایراد میگیره

  9. #9

    نقل قول: تبدیل زمان و تاریخ در FastReport

    باز هم تست کردم اما نمیشه !

  10. #10

    نقل قول: تبدیل زمان و تاریخ در FastReport

    اینو تست کردم.کامپایل میشد.
    میتونی از توابع DateTimeToStr و StrToDate و ... خود پاسکال اسکریپت استفاده کنی.
    کد HTML:
    function shamsi(tt:tdatetime):string;
    var
    str,y,m,d:string;
    yi,mi,di:integer;
    begin
    str:=datetostr(tt);
    y:=copy(str,1,4);
    m:=copy(str,6,2);
    d:=copy(str,9,2);
    yi:=strtoint(y);
    mi:=strtoint(m);
    di:=strtoint(d);
    if (yi mod 4=0) then
    if mi>2 then
    begin
    tt:=tt+1;
    str:=datetostr(tt);
    y:=copy(str,1,4);
    m:=copy(str,6,2);
    d:=copy(str,9,2);
    yi:=strtoint(y);
    mi:=strtoint(m);
    di:=strtoint(d);
    end;
    if ((mi<3) or ((mi=3) and (di<21))) then
    begin
    yi:=yi-622;
    end
    else
    begin
    yi:=yi-621;
    end;
    case mi of
    1:
    
    if di<21 then
    begin
    mi:=10;
    di:=di+10;
    end
    else
    begin
    mi:=11;
    di:=di+10;
    end;
    
    2:
    if di<20 then
    begin
    mi:=11;
    di:=di+11;
    end
    else
    begin
    mi:=12;
    di:=di-19;
    end;
    3:
    if di<21 then
    begin
    mi:=12;
    di:=di+9;
    end
    else
    begin
    mi:=1;
    di:=di-20;
    end;
    4:
    if di<21 then
    begin
    mi:=1;
    di:=di+11;
    end
    else
    begin
    mi:=2;
    di:=di-20;
    end;
    5:
    if di<22 then
    begin
    mi:=mi-3;
    di:=di+10;
    end
    else
    begin
    mi:=mi-2;
    di:=di-21;
    end;
    6:
    if di<22 then
    begin
    mi:=mi-3;
    di:=di+10;
    end
    else
    begin
    mi:=mi-2;
    di:=di-21;
    end;
    7:
    if di<23 then
    begin
    mi:=mi-3;
    di:=di+9;
    end
    else
    begin
    mi:=mi-2;
    di:=di-22;
    end;
    8:
    if di<23 then
    begin
    mi:=mi-3;
    di:=di+9;
    end
    else
    begin
    mi:=mi-2;
    di:=di-22;
    end;
    9:
    if di<23 then
    begin
    mi:=mi-3;
    di:=di+9;
    end
    else
    begin
    mi:=mi-2;
    di:=di-22;
    end;
    10:
    if di<23 then
    begin
    mi:=7;
    di:=di+8;
    end
    else
    begin
    mi:=8;
    di:=di-22;
    end;
    11:
    if di<22 then
    begin
    mi:=mi-3;
    di:=di+9;
    end
    else
    begin
    mi:=mi-2;
    di:=di-21;
    end;
    12:
    if di<22 then
    begin
    mi:=mi-3;
    di:=di+9;
    end
    else
    begin
    mi:=mi-2;
    di:=di-21;
    end;
    end;
    y:=inttostr(yi);
    m:=inttostr(mi);
    
    if (length(m)=1) then
    m:='0'+m;
    d:=inttostr(di);
    if length(d)=1 then
    d:='0'+d;
    result:=y+'/'+m+'/'+d
    end;

  11. #11
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    360

    نقل قول: تبدیل زمان و تاریخ در FastReport

    نقل قول نوشته شده توسط علی کشاورز مشاهده تاپیک
    راه های مختلفی برای تبدیل وجود دارند، شامل:

    1- ایجاد یک فیلد Calculated در دیتاست، و تبدیل مقدار فیلد تاریخ میلادی به شمسی توسط یک تابع یا کامپوننت یا هر چیز دیگه، و قرار دادن نتیجه در داخل این فیلد. اینطوری اون فیلد محاسباتی در فست ریپورت هم در دسترس خواهد بود.
    2- استفاده از رویدادهای OnSetText و OnGetText فیلد تاریخ مربوطه، برای تبدیل تاریخ میلادی به شمسی و بالعکس.
    3- رجیستر کردن یک تابع آماده تبدیل تاریخ میلادی به شمسی دلفی در موتور اسکریپت فست ریپورت، و فراخوانی آن تابع در داخل فست ریپورت.
    4- نوشتن یک تابع تبدیل میلادی به شمسی با استفاده از PascalScript در داخل فست ریپورت.
    5- در صورتی که از بانک اطلاعاتی استفاده می کنید که امکان تعریف توابع کاربر را داره (مثل MS SQL Server)؛ تعریف یک تابع کاربر در بانک اطلاعاتی، برای تبدیل تاریخ میلادی به شمسی. البته این حالت بیشتر به درد زمانی میخوره که مقدار اون فیلد که توسط کوئری برگشت داده میشه، فقط-خواندنی باشه، و قصد نداشته باشید که مقدارش را در برنامه تغییر بدید.

    برای هر کدوم از حالت های فوق (به غیر از حالت 4) در این سایت تاپیک هایی وجود داره.
    من از OnGetText استفاده کردم در dbgrid تاریخ به شمسی نمایش می دهد ولی در FastReport اما به میلادی

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •