View Full Version : بدست آوردن تاریخ کلیه روزهای جمعه در سال
hadisalahi2
جمعه 15 بهمن 1389, 11:14 صبح
با سلام به همگی دوستان
در حال نوشتن یک برنامه محاسبه کارت مرخصی هستم.
حالا در این برنامه لازمه تا روزهای جمعه و تعطیلات رسمی که جزو تعطیلاته از تعداد مرخصی های هر فرد کم بشه.
حالا نیاز به این دارم که تاریخ کلیه روزهای جمعه رو بدست بیارم.
در ضمن چطور میتونم تاریخ کلیه روزهای تعطیل رسمی رو هم متوجه بشم؟ البته اگه کامپوننت خاصی هست در این زمینه.
یا امام رضا(ع)
Felony
جمعه 15 بهمن 1389, 13:03 عصر
حالا نیاز به این دارم که تاریخ کلیه روزهای جمعه رو بدست بیارم.
اگر تاریخ یکی از روزهای جمعه رو داشته باشی پیدا کردن باقیش کاری نداره ، 7 تا بهش اضافه کنی میشه تاریخ بعدی که جمعه هست .
در مورد تعطیلات رسمی هم کامپوننتی نیست و نباید هم باشه !
حمید محمودی
جمعه 15 بهمن 1389, 16:59 عصر
در ضمن چطور میتونم تاریخ کلیه روزهای تعطیل رسمی رو هم متوجه بشم؟
سلام در کامپوننت رایگان XCalender (http://xcalendar.sourceforge.net) یک دمو بنام IranEvents هست که فکر کنم کارتون رو راه بندازه. تعطیلات رسمی و مناسبت های دیگه در فایل های XML هستند و توسط کامپوننت خوانده میشند. میتونید با تکمیل اون فایل به اونچه که میخواید برسید.
ضمنا این کامپوننت امکانات خوبی برای تاریخ شمسی، قمری و میلادی داره که دمو های اون میتونید بببنید.
نمونه زیر رو براتون کپچر کردم میتونید ببنید.
موفق باشید.
65947
hadisalahi2
شنبه 16 بهمن 1389, 09:48 صبح
اگر تاریخ یکی از روزهای جمعه رو داشته باشی پیدا کردن باقیش کاری نداره ، 7 تا بهش اضافه کنی میشه تاریخ بعدی که جمعه هست .
در مورد تعطیلات رسمی هم کامپوننتی نیست و نباید هم باشه !
نمیشه همون تاریخ اول رو به یک صورت بدست آورد؟
چون من نمیخوام کاربر در این کار دخالتی داشته باشه و میخوام خود نرم افزار این کار رو انجام بده.
یاحق
Felony
شنبه 16 بهمن 1389, 10:07 صبح
نمیشه همون تاریخ اول رو به یک صورت بدست آورد؟
چون من نمیخوام کاربر در این کار دخالتی داشته باشه و میخوام خود نرم افزار این کار رو انجام بده.
یاحق
نه !
بلاخره باید یه سر نخی به برنامه بدی ، اگر برنامت میتونه به اینترنت متصل بشه میتونی دنبال یک سایت بگردی که تقویم فارسی ارائه کنه و از رو اون اطلاعاتت رو بخونی ؛ البته اگر این کار رو بکنی اون سایت احتمال زیاد ایرانی هست و به سایت های ایرانی اطمینانی نیست و هر لحظه امکان داره بسته یا فیلتر بشن .
حمید محمودی
شنبه 16 بهمن 1389, 14:03 عصر
نمیشه همون تاریخ اول رو به یک صورت بدست آورد؟
چون من نمیخوام کاربر در این کار دخالتی داشته باشه و میخوام خود نرم افزار این کار رو انجام بده.
در پست قبلی خود عرض کردم که کامپوننت XCalender (http://xcalendar.sourceforge.net/) امکانات خوبی برای تاریخ شمسی، قمری و میلادی داره. در همون Demoهای این کامپوننت یه پوشه هست بنام Calenders و توی این پوشه یه قسمت هست برای اینکه بشه نزدیکترین جمعه (Nearest Friday) نسبت به تاریخ فعلی رو بدست آورد. این مورد مشکلتون رو حل نمیکنه؟ :متفکر:
ضمنا کد بدست آوردن نزدیکترین جمعه نسبت به تاریخ فعلی بصورت زیر هست : (البته توجه داشته باشین که این کد فقط نزدیکترین جمعه نسبت به تاریخ فعلی رو تعیین میکنه، یعنی اگه فرض کنیم امروز که شبنه هست تاریخش رو به برنامه بدیم، برنامه هم برای نزدیکترین جمعه تاریخ روز قبل که جمعه بود رو میاره، نه تاریخ نزدیک ترین جمعه هفته بعد! )
Edit_NearestFriday.Text := FXCalendar.FormatDateTime(FXCalendar.FormatSetting s.LongDateFormat,FXCalendar.EncodeNearestDayOfWeek ToADate(FDate, xcalFriday));
hadisalahi2
شنبه 16 بهمن 1389, 19:27 عصر
البته به نظر شما اگه تاریخ 1390/1/1 رو بهش بدیم و تاریخ جمعه قبل رو برگردونه ، میشه چک کنیم که تاریخ برگشتی مال اولین جمعه سال 89 یا اولین جمعه سال 90 میشه.
اگه سال 90 باشه پس اولین جمعه سال بدست میاد . نظر شما چیه؟
nsco_nsco
شنبه 16 بهمن 1389, 20:40 عصر
سلام دوست من
تو باید اول بیای یک تقویم شمسی بسازی و بعدش اول روز سال رو ببینی چند شنبه هست و بعدش اولین جمعه رو بدست بیاری تا اونجایی که یادم هست هر سال دو روز اضافه میشه به روز سال و بعدش طبق تقویم روزهای تعطیل رو مشخصص کنی تا اونجا که می دونم تا پارسال 24 تعطیلی داشتیم که امسال 21 هست و فکر نکنم کمتر بشه البته باید یک قابلیتی بگذاری شاید مثل پنج شنبه ای بشه که بین دو روز تعطیلی بود و تعطیل کردنش حالا باید بشه در نرم افزارت به صورت دستی نیز بشه روزی رو تعطیل کرد اگر سوالی داشتی با ایمیل یاهوم ارتباط بر قرار کن موفق باشی ..:قلب::تشویق:
حمید محمودی
شنبه 16 بهمن 1389, 23:53 عصر
البته به نظر شما اگه تاریخ 1390/1/1 رو بهش بدیم و تاریخ جمعه قبل رو برگردونه ، میشه چک کنیم که تاریخ برگشتی مال اولین جمعه سال 89 یا اولین جمعه سال 90 میشه.
اگه سال 90 باشه پس اولین جمعه سال بدست میاد . نظر شما چیه؟
الان بررسی کردم بطور کلی اگه تاریخ یکی از روزهای : شنبه، یکشنبه، دوشنبه رو به برنامه بدیم، درنتیجه تاریخ نزدیکترین جمعه که هفته قبل میشه رو میده.
اما اگه تاریخ یکی از روزهای سه شنبه، چهارشنبه، پنج شنبه، جمعه رو بدیم تاریخ نزدیکترین جمعه هفته بعد رو میده.
مثلا
شنبه 16/11/89 نزدیکترین جمعه 15/11/89
یکشنبه 17/11/89 نزدیکترین جمعه 15/11/89
دوشنبه 18/11/89 نزدیکترین جمعه 15/11/89
سه شنبه 19/11/89 نزدیکترین جمعه 22/11/89
چهار شنبه 20/11/89 نزدیکترین جمعه 22/11/89
پنجشنبه 21/11/89 نزدیکترین جمعه 22/11/89
جمعه 22/11/89 نزدیکترین جمعه 22/11/89
والی آخر...
پس شما میتونید با بدست اوردن اینکه امروز چند شنبه هست کارتون رو راه بندازین.
اینکه امروز چه روزی هست در فانکشن DayOfWeek محاسبه میشه که میتونید از اون کمک بگیرید.
موفق باشید.
h_mohamadi
یک شنبه 17 بهمن 1389, 22:50 عصر
سلام
بهترين روش اين است که با يک for کل تاريخ سال را بدهي در فاکشن زير و بگويي اگر جمعه بود تاريخ آن را در يک تيبل بريزد و به برنامه ات بگويي از تيبل تاريخ روزهاي جمعه را بخواند.
اين فانکشن
اگر مشکل داشتيد بگوئيد.
Function DayOfWeek_Shamsi(Tarikh:String):String;
Var
Sum:int64;
day:String;
y,m,d:integer;
Begin
y:=StrToInt(copy(Tarikh,1,2));
m:=StrToInt(copy(Tarikh,3,2));
d:=StrToInt(copy(Tarikh,5,2));
Sum:=y div 4;
sum:=sum+(y*365);
if m<=6 then
Sum:=Sum+((m-1)*31)+d
else
Begin
Sum:=Sum+(6*31)+d;
Sum:=Sum+((m-7)*30);
end;
DayOfWeek_Shamsi:=IntToStr(Sum Mod 7);
Case StrToInt(Result) Of
0:Result:= 'يکشنبه';
1:Result:='دوشنبه';
2:Result:='سه شنبه';
3:Result:='چهارشنبه';
4:Result:='پنجشنبه';
5:Result:='جمعه';
6:Result:='شنبه';
End;
hadisalahi2
دوشنبه 18 بهمن 1389, 09:16 صبح
با تشکر از پاسختون
من فکر میکنم روش دوستمون حمید محمودی روش سریعتری باشه چون کامپوننت تقویم خودش میتونه تشخیص بده که امروز چند شنبه است.و در صورتی که جمعه بود میشه از اون به بعد رو با روش دستمون مجتبی تاجیک 7 روز به تاریخ بدست اومده اضافه کنیم تا تاریخ کلیه روزهای جمعه بدست بیاد.
البته یک روش دیگه هم میتونه این باشه که تاریخ رو از 1389/1/1 تا انتهای سال رو ابتدا به میلادی تبدیل کنیم و بدست بیاریم این تاریخ چند شنبه است. حالا اگه جمعه بود تاریخش داخل جدول ذخیره بشه و اگر نه هم بره به تاریخ بعدی.
نظر شما دوستان چیه؟
h_mohamadi
پنج شنبه 21 بهمن 1389, 15:52 عصر
البته یک روش دیگه هم میتونه این باشه که تاریخ رو از 1389/1/1 تا انتهای سال رو ابتدا به میلادی تبدیل کنیم و بدست بیاریم این تاریخ چند شنبه است. حالا اگه جمعه بود تاریخش داخل جدول ذخیره بشه و اگر نه هم بره به تاریخ بعدی.
نظر شما دوستان چیه؟
من فکر کنم اين روش شما بيشتر زمان مي برد چون بايد يکبار از تاريخ اول سال را به ميلادي تبديل کنيد که يک FOR است و بعد تاريخش را در جدول ذخيره کنيد و دوباره بايد تاريخ ميلادي را به شمسي تبديل کنيد.
تا نظر دوستان چي باشد؟؟
hadisalahi2
پنج شنبه 21 بهمن 1389, 19:12 عصر
دوست عزیز با نظر شما موافقم.
علاوه بر اینکه باید تبدیل صورت بگیره مشکل دیگه ای هم وجود داره و اینه که اصلا هیچ کدوم از کامپوننت هایی که استفاده کردم نمی تونن به تاریخ جاری یک عدد رو درست حساب کنند.
حتی تاریخ میلادی و شمسی رو هم درست به هم تبدیل نمی کنند.
هم در Solar و هم در UfarsiDate این مشکل وجود داره.
حالا در نهایت فعلا از روش شما استفاده کردم.
البته یک مشکل داره که روزهای 30 رو درست حساب نمیکنه مثلا یک تاریخ جمعه رو 1389/10/31 حساب کرده بود.
در کامپوننت X calender قابلیتی برا فهمیدن اینکه روز جمعه است یا نه وجود داره ولی من روش اون رو بلد نیستم.
یا حق
h_mohamadi
جمعه 22 بهمن 1389, 21:33 عصر
فکر کنم روش من بد نباشد .چون من خودم از آن در نرم افزار حقوق و دستمزد خودم استفاده کردم
hadisalahi2
شنبه 23 بهمن 1389, 19:49 عصر
من نگفتم روش شما بده من گفتم فقط بعضی از تاریخ ها رو هم که اصلا وجود نداره به عنوان جمعه حساب میکنه مثلا 1389/10/31
در کل روش شما کار من رو راه انداخت و ممنونم
یا حق
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.