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

نام تاپیک: تاریخ فارسی

  1. #1
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    net_ved@yahoo.com
    پست
    184

    تاریخ فارسی

    سلام
    من برای تاریخ زدن از متد strtodate استفاده می کنم برای مثال وقتی رشته 1384/02/31 را به date

    بدل می کنم error تاریخ نا معتبر را می ده....من متوجه شدم که این مورد یک ماه در میان وجود داره

    البته تو ماهای میلادی ...ماه های 2و4و6و8و10و12 و البته یه استثنا هم وجود داره ماه دوم....که فقط تا

    29 روز می گیره...حالا ما ایرونی هایی که 6 ماه اولمون 31 روزه ست چه کنیم....

  2. #2
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    net_ved@yahoo.com
    پست
    184
    آقایون من می دونم که این کار نشدنیه...یعنی یه سرچکی زدم....ولی شما راهی ندارین....آخه این همه برنامه مهم تو کشور داره با تاریخ شمسی درست کار می کنه....اینم بدونین که مشکل من ذخیره سازی تاریخ در جول نیست مشکل من اینه که می خوام مثلا به تاریخ 1384/02/31 دو روز اضافه کنم...چطوری این مشکلو حل کنم ...من در حالت عادی از strtodate+10 برای اضافه کردن 10 روز استفاده می کنم....دیگه چه راهی است...

  3. #3
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    net_ved@yahoo.com
    پست
    184
    یه سوال دیگه اینکه ...نمی شه یه تقویم فارسی بدون نیاز به استفاده از تاریخ میلادی نوشت؟....یعنی یه تقویم مستقل از تاریخ ویندو....

  4. #4
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    تهران
    پست
    558
    سلام net_ved
    من برای کار با تاریخ 2 تا تابع نوشتم که میلادی رو به شمسی تبدیل می کنه و بالعکس٬‌تاریخ رو تو بانک بصورت میلادی نگه می دارم و فقط برای نمایش و ورود تاریخ از کاربر شمسی اونرو می گیرم.
    با اینکار براحتی می تونم٬‌توابع مربوط به تاریخ رو روی تاریخ موجود در بانک اطلاعاتی اعمال کنم.
    به نظر من امکان نوشتن یه تاریخ مستقل از ویندوز وجود نداره.

  5. #5
    اگه برید help رو بخونید می تونید رنج تاریخ رو برای سال میلادی ببینید که فکر کنم 18xxمیلادی می باشد
    بنابراین معلوم است که از تاریخ 1384 ایراد بگیرد.
    بایستی قبل از دادن به تابع یک سری کو وزیاد انجام شود.

  6. #6
    هر برنامه نویس ایرانی بالاخره باید دیر یا زود مشکل خودشو با تاریخ شمسی حل کنه
    استفاده از نوع TDateTime هم فایدهای ندارد چون تعداد روزهای گذشته از تاریخ 30/12/1899 را نگهداری میکند که عملا با تاریخ ما سازگار نیست
    حال شما دو راه بیشتر ندارید یا اینکه همان طور که دوستان فرمودند از کامپوننت های تجاری در بازار مانند ShDate استفاده کنید و یا اینکه تصمیم بگیرید که خودتون این مشکل را به یکبار برای همیشه حل کنید .من از راه دوم استفاده کردم
    اگر شما هم خواستید از راه دوم استفاده کنید میتونید هر سوالی داشتید در این بخش مطرح کنید

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


    موفق باشید :wise2:

  7. #7
    آقایون من می دونم که این کار نشدنیه...یعنی یه سرچکی زدم
    میتونی به اینجا هم سری بزنی
    http://www.barnamenevis.org/viewtopic.php?t=24738

  8. #8
    کاربر دائمی آواتار Mahdi_S_T
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    خراسان رضوی
    پست
    1,039
    بهترین کار استفاده از کامپوننت های زیر است که من چند وقتی است با آن کار می کنم و دیگر نگرانی کار با تاریخ شمسی ندارم . ....... به شرط چاقو .........

    http://www.farsicomponents.com

  9. #9
    بهترین کار استفاده از کامپوننت های زیر است که من چند وقتی است با آن کار می کنم و دیگر نگرانی کار با تاریخ شمسی ندارم
    منم با نظرت موافقم یکی از بهترین کامپوننت های نوشته شده برای تاریخ فارسی می باشد. قیمتشم هم مناسب است.

  10. #10
    کامپوننت تبدیل تاریخ میلادی به شمسی:

    www.salarsoft.somee.com

    در ضمن این توابع با استفاده از TDateTime کار میکنند.
    توضیحات آن را حتما بخوانید.
    تو ضیحات توابع: http://www.salarsoft.somee.com/magal..._date_help.htm :)

  11. #11
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    net_ved@yahoo.com
    پست
    184
    نگاه کنید دوستان....اکثر شما سوال منو درست متوجه نشدین....من مشکلی برای تبدیل و ثبت تاریخ ندارم...مشکل وقتی که من می خوام با روال strtodate به رشته...1384/02/31 ده روز اضافه کنم خود رویه strtodate برام مشکلساز می شه....این موضورو چطور حل کنم....من در اجبم این همه سیستم dos دارن بدون مشکل کار می کنن...آخه چطوری؟...اونام از کامپوننت استفاده کردن؟....اینقد با کامپوننت کار کردیم که اگه روزی برسه ابزار نداشته باشیم گیرپاچ می کنیم.

  12. #12
    کاربر دائمی
    تاریخ عضویت
    اسفند 1383
    محل زندگی
    اصفهان
    پست
    105
    با سلام
    من تاریخ را به صورت فارسی 22/10/1384 دریافت کردم بعدا این تاریخ را به صورت تعداد روز از تاریخ 1/1/1302 محاسبه کردم مثلا می شود 7521254 روز این عدد را بع مثلا 10 جمع کردم و سپس عدد حاصله را دومرتبه به تاریخ تبدیل کردم به این ترتیب تاریخ بعدی به دست آمده است . اگر منظورتون اینه می تونم تابع نوشته شده را هم ارسال کنم

  13. #13
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    net_ved@yahoo.com
    پست
    184
    خیلی ممنون می شم اگه ارسال کنید

  14. #14
    کاربر دائمی آواتار javidtaheri
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    301
    ساده ترین راه تعریف Mask تاریخ و string تعریف کردن فیلد مربوطه است
    یکی از دوستان هم unit برای تاریخ فارسی و تبدیل آن به میلادی نوشته که من ارسال میکنم

  15. #15
    کاربر دائمی
    تاریخ عضویت
    اسفند 1383
    محل زندگی
    اصفهان
    پست
    105
    امیدوارم بدرد بخوره

  16. #16
    کاربر دائمی
    تاریخ عضویت
    اسفند 1383
    محل زندگی
    اصفهان
    پست
    105
    me_date.text:=date_badi('82/10/08',128);
    //*****************************

    function date_badi(d:st8;tr:integer):st10;
    const
    a:array[1..13]of word=(0,31,62,93,124,155,186,216,246,276,306,336,3 65);
    var
    da:string[10];
    tk,dm,dan:longint;
    i:byte;
    begin
    tk:=trunc(((strtoint(copy(d,1,2))-2)*365.25)+a[(strtoint(copy(d,4,2)))]+ strtoint(copy(d,7,2))+tr);
    dan:=trunc(tk/365.25)+1302;
    da:=trim(inttostr(dan)+'/');
    dm:=trunc(tk-(trunc(tk / 365.25)*365.25));
    i:=1;
    while dm>a[i] do
    i:=i+1;

    if (i-1)<10 then
    da:=da+'0'+trim(inttostr(i-1))+'/'
    else
    da:=da+trim(inttostr(i-1))+'/';

    if (dm-a[i-1])<10 then
    da:=da+'0'+trim(inttostr(dm-a[i-1]))
    else
    da:=da+trim(inttostr(dm-a[i-1]));
    date_badi:=da;
    end;

  17. #17
    کاربر دائمی آواتار MiRHaDi
    تاریخ عضویت
    تیر 1383
    محل زندگی
    تهران - سوهانک
    پست
    982
    سلام عزیزم
    تاریخ فارسی رو با StrToDate اگه بخوای ببری باید هم خطا بده
    ماه 2 میلادی چند روزه ؟ خوب ! حالا شما میای میگی 31/2 خوب باید خطا بده !
    اگر میخوای از TDate استفاده کنی باید تاریخ شمسی رو به میلادی تبدیل کنی و بعد ذخیره کنی و موقع استفاده اون رو به شمسی تبدیل کنی برای نمایش فقط ! محاسبات همه با میلادی انجام میشه !
    این خیلی خاصیت نسبت به کار با رشته و امثال اون داره !
    مثلا شما میتونی تاریخت رو با 100 جمع کنی و 100 روز دیگه رو داشته باشی بدون هیچ خطایی یا میتونی دو تا تاریخ رو از هم کم کنی ببینی چند روز گذشته ! حتی توی Sql میتونی ازشون استفاده کنی
    بهترین راهش اینه
    یا حق

  18. #18

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

    من از این کامپونت توی تمام برنامه هام استفاده میکنم و خیلی عالیه و حتی از توابع اونمیشه برای تبدیل تاریخ میلادی به شمسی یا ... استفاده کرد .
    اگر کسی خواست براش بفرستم برام Mail بزنید براتون Send میکنم . من خراب دلفی کارا هستم . :mrgreen: ::نوشتن::

  19. #19
    سلام
    نیکی و پرسش ؟
    من خراب دلفی کارا هستم .
    لطف کنین کامپوننتو بذارین اینجا همه استفاده کنن . :flower:

  20. #20
    VIP آواتار دنیای دلفی
    تاریخ عضویت
    شهریور 1404
    محل زندگی
    یک جایی توی جنوب ایران
    پست
    1,298
    کامپوننت Shdate برای کار با تاریخ شمسی در یونیت Shdateuntils توابع کاملی داره . :embr:
    پس از دو سال بررسی بلاخره به بازار آمد
    متفاوت و هوشمندانه
    برای ورود کلیک کنید
    IMEN LOCK

  21. #21
    خوب ببینید میتونید از این فانکشن ها استفاده کنید . من که خودم همیشه از همین فانکشن ها برای تبدیل تاریخ استفاده میکنم در ضمن تاریخ رو هم اگر بخوام در جداولم با فرمت شمسی ذخیره کنم نوع فیلد تاریخ رو از نوی کاراکتر میگیرم که مشکل ارورها دیتابیس حل بشه البته اگر محاسبه دقیق برروی تاریخ لازم دارید بهتره که هم تاریخ میلادی و هم شمسی رو ذخیره کنید که محاسبات شما اگر دقت زیادی روی تاریخ داره بتونی از تاریخ میلادی برای محاسبات استفاده کنی و تاریخ شمسی رو فقط نمایش بدی . چون تاریخ میلادی همونطور که یکی از دوستان گفتند قابلیتهای فراوانی توی دیتابیس داره که گاهی اوقات استفاده از اونها لازمه .
    برای استفاده از این فانکشنها فقط یونیت اونها رو در یوزز اضافه کنید و از توابع اونها استفاده کنید .
    ------------
    موفق باشید.
    فایل های ضمیمه فایل های ضمیمه

  22. #22
    کاربر دائمی آواتار babak_delphi
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    آستارا
    پست
    634
    من 2 تا تابع نوشتم یکی برای تبدیل شمسی به میلادی و یکی برای تبدیل تاریخ میلادی به شمسی
    تاریخ سیستم رو میگیرم ، به شمسی تبدیل میکنم و در فرمی که به شکل یک تقویم ساختم نشون میدم (کاربر در این فرم امکان تغییر تاریخ را بصورت کامل و راحت داره)
    موقع ذخیره بصورت عدد ذخیره میکنم
    مثلا 14/05/1386 رو بصورت 13860514 ذخیره میکنم
    2 تابع به نامهای DATE_TO_INT و INT_TO_DATE نوشتم که برای تبدیل تاریخ به عدد و عدد به تاریخ (با فرمت ذکر شده) استفاده می کنم
    توابع دیگری هم برای کارهای مربوط به تاریخ نوشتم ، مثل : نشان دادن روز هفته ، نشان دادن فاصله 2 تاریخ هم بصورت روز و هم بصورت ماه و روز (47 روز یا مثلا 2 ماه و 6 روز)
    توابع مشابه اینها در دلفی وجود داشت ولی چون برای تاریخ میلادی نوشته شده من برای اینکه دقیق باشه خودم یک بار توابع لازم رو نوشتم و تو برنامه هام از اونا استفاده می کنم
    فرمی را هم که برای کار با تقویم ساخته ام رو به شکل یک تقویم کامل ساخته ام که از اون هم تو برنامه هام استفاده می کنم
    شما هم میتونید از این راهکار استفاده کنید.
    آخرین ویرایش به وسیله babak_delphi : یک شنبه 04 فروردین 1387 در 01:14 صبح

  23. #23
    این تاپیک رو هم یه نگاه بکنید شاید کمکتون کنه .
    https://barnamenevis.org/showthread.php?t=45349

  24. #24
    کاربر دائمی آواتار babak_delphi
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    آستارا
    پست
    634
    تعریف از خود نبود
    معرفی یک راه حل بود که قبلا انجام داده بودم و میتونه مفید باشه
    اینجا جای تعریف از خود نیست و در حضور اساتیدی مثل آقای وکیلی ، کرامتی ، کشاورز ، اینپرایز ، اکسیژن و بسیاری دیگر از اساتید من به خودم اجازه تعریف نمی دهم
    شما هم بجای به انحراف کشیدن بحث سعی کنید با دید مثبت به مسائل نگاه کنید و منفی بافی ننمایید.
    (هدف از این انجمن تبادل نظرات علمی و عملی است .)
    وقتی که قرار نیست که کدهای سورس ذکر بشه پس بدونید که ذکر اسم تابع این دوست گرامی دردی از کسی دوا نمیکنه 

    ضمنا منظورم از گفتن اسم تابع اینه که توابع مشابه همین در VCL بودند که کار مشابهی رو انجام میدادند که من تابعی با عملکرد مشابه اون ولی اختصاصی سازی شده اش رو نوشتم و شما هم میتونید در موارد مشابه ، همین کار رو انجام بدید تا خواناتر هم باشه
    (DateToInt »» Date_To_Int و ...)


    Function MiladiToHejri(GregorianDate : String;DateType : Integer) : String;
    var
    jmm, jdd : string;
    g_days_in_month, j_days_in_month : array[0..11] of Integer;
    HijriMonths : array[1..12] of String;
    g_day_no, j_day_no, jy, jm, gy, gm : Longint;
    j_np, i, jd, GD : Integer;
    flag : Boolean;
    begin
    Try
    flag := true;
    g_days_in_month[0] := 31;
    g_days_in_month[1] := 28;
    g_days_in_month[2] := 31;
    g_days_in_month[3] := 30;
    g_days_in_month[4] := 31;
    g_days_in_month[5] := 30;
    g_days_in_month[6] := 31;
    g_days_in_month[7] := 31;
    g_days_in_month[8] := 30;
    g_days_in_month[9] := 31;
    g_days_in_month[10] := 30;
    g_days_in_month[11] := 31;
    j_days_in_month[0] := 31;
    j_days_in_month[1] := 31;
    j_days_in_month[2] := 31;
    j_days_in_month[3] := 31;
    j_days_in_month[4] := 31;
    j_days_in_month[5] := 31;
    j_days_in_month[6] := 30;
    j_days_in_month[7] := 30;
    j_days_in_month[8] := 30;
    j_days_in_month[9] := 30;
    j_days_in_month[10] := 30;
    j_days_in_month[11] := 29;
    If GregorianDate = Null Then Exit;
    gy := (StrToInt(FormatDateTime('yyyy', StrToDate(GregorianDate)))) - 1600 ;
    gm := (StrToInt(FormatDateTime('mm', StrToDate(GregorianDate)))) - 1 ;
    GD := (StrToInt(FormatDateTime('dd', StrToDate(GregorianDate)))) - 1 ;
    g_day_no := 365 * gy + (gy + 3) div 4 - (gy + 99) div 100 + ( gy + 399) div 400;
    i := 0;
    While i < gm do
    begin
    g_day_no := g_day_no + g_days_in_month[i];
    i := i + 1;
    end;
    If (gm > 1) And (((gy Mod 4 = 0) And (gy Mod 100 <> 0)) Or (gy Mod 400 = 0)) Then
    g_day_no := g_day_no + 1;
    g_day_no := g_day_no + GD;
    j_day_no := g_day_no - 79;
    j_np := j_day_no div 12053;
    j_day_no := j_day_no Mod 12053;
    jy := 979 + 33 * j_np + 4 * (j_day_no div 1461);
    j_day_no := j_day_no Mod 1461;
    If (j_day_no >= 366) Then
    begin
    jy := jy + (j_day_no - 1) div 365;
    j_day_no := (j_day_no - 1) Mod 365;
    End;
    i := 0;
    While (j_day_no >= j_days_in_month[i]) and flag do
    begin
    j_day_no := j_day_no - j_days_in_month[i];
    i := i + 1;
    If i > 12 Then
    begin
    i := 11;
    j_day_no := 29;
    flag := False;
    End;
    end;
    jm := i + 1;
    jd := j_day_no + 1;
    jmm := IntToStr(jm);
    jdd := IntToStr(jd);
    If (Length(jmm) = 1) then
    jmm := '0' + jmm
    else
    jmm := jmm;
    if (Length(jdd) = 1) then
    jdd := '0' + jdd
    else
    jdd := jdd;
    HijriMonths[1] := 'فروردین';
    HijriMonths[2] := 'اردیبهشت';
    HijriMonths[3] := 'خرداد';
    HijriMonths[4] := 'تیر';
    HijriMonths[5] := 'مرداد';
    HijriMonths[6] := 'شهریور';
    HijriMonths[7] := 'مهر';
    HijriMonths[8] := 'آبان';
    HijriMonths[9] := 'آذر';
    HijriMonths[10] := 'دی';
    HijriMonths[11] := 'بهمن';
    HijriMonths[12] := 'اسفند';
    if jmm = '13' then
    begin
    jmm := '12';
    jdd := '30';
    end;
    Case DateType of
    0:
    MiladiToHejri := IntToStr(jy) + '/' + jmm + '/' + jdd;
    1:
    MiladiToHejri := IntToStr(strtoint(jdd)) + ' ' + HijriMonths[StrToInt(jmm)] + ' ' + IntToStr(jy);
    End;
    except
    MiladiToHejri := 'تاریخ وارد شده، اشتباه می باشد .';
    end;
    End;
    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;
    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;

    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';
    c := 0;
    While True do
    begin
    tmp := GD;
    If HD = MiladiToHejri(GD,0) Then
    break;
    GD := DateToStr(strtoDate(tmp)+ 1);
    c := c + 1;
    If c > 1000 Then
    begin

    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;


  25. #25
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    چرا از dll موجود استفاده نمی کنید.

  26. #26
    آیا کسی هست که مرادراستفاده از DbIsam راهنمایی یا آموزش بدهد؟

  27. #27
    کاربر دائمی آواتار babak_delphi
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    آستارا
    پست
    634
    یعنی مشکاتون حل نشد؟
    من تابع مورد استفاده را هم قرار دادم
    یک مقدار هم خلّاقیت نشان دهید

  28. #28

    نقل قول: تاریخ فارسی

    سلام من چگونه می تونم تاریخ روبرو رو به صورت زیر تبدیل کنم 01/01/1387
    یکم فروردین ماه هزار و سیصدو هشتاد وهفت

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

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