PDA

View Full Version : فرمول بدست آوردن ایام هفته



Saeid59_m
دوشنبه 01 مرداد 1386, 12:04 عصر
سلام
دوستان کسی فرمول بدست آوردن ایام هفته را ندارد ؟

1386/5/1 --------> دوشنبه

SYNDROME
دوشنبه 01 مرداد 1386, 12:14 عصر
با سلام

سلام
دوستان کسی فرمول بدست آوردن ایام هفته را ندارد ؟
1386/5/1 --------> دوشنبه
1-اول فاصله دو تا تاریخ را به دست بیاور
2-سپس باقی مانده عدد به دست آمده تقسیم بر 7 را به دست بیاور.
3-سپس به عداد روزها باقی مانده به روز مورد نظر اضافه کن.
مثال :تاریخ اول را تاریخ خودت را انتخاب کردم.
تاریخ دوم : 1/6/1386
1-اختلاف : 31
2-باقی مانده 31 تقسیم بر 7 : 3
3-3 روز به دوشنبه اضافه می کنم :پنج شنبه
موفق باشی

ghabil
دوشنبه 01 مرداد 1386, 13:14 عصر
روش درست استفاده از تابع DayOfWeek هست ، ولی اول باید تاریخت رو به میلادی تبدیل کنی بعد بهش بدی.
حساب کردن اختلاف تقریبا عملی نیست ، مگر اینکه همه پارامترها ، مثل سالهای کبیسه و تعداد روزهای ماههای مختلف رو در نظر بگیری!

Batman
دوشنبه 01 مرداد 1386, 13:21 عصر
در ادامه صحبتهای آقای ghabil
بدست آوردن روز هفته dayofweek و استفاده از دستور case
در ضمن یکشنبه اولین روز هفته هستش
case dayofw
0:sunday;
1:monday;
موفق باشی
...

Saeid59_m
دوشنبه 01 مرداد 1386, 13:22 عصر
دوستان من قبلاً فرمولش رو داشتم . ولی حالا دقیق یادم نیست

اینطور بود که هر ماه رو + یک عدد ثابت می کردی و حاصل رو تقسیم بر 7 میکردیم . باقی مانده می شد حاصل . اگه کسی اون جدول رو داره . لطف کنه . ممنون

Batman
دوشنبه 01 مرداد 1386, 13:30 عصر
آقا سعید وقتی از همین راه میشه مشکل رو برطرف کرد دیگه چرا راه حل دیگری رو امتحان کنیم

Saeid59_m
دوشنبه 01 مرداد 1386, 14:18 عصر
آقا سعید وقتی از همین راه میشه مشکل رو برطرف کرد دیگه چرا راه حل دیگری رو امتحان کنیم
درسته ولی روشی که شما گفته اید فقط برای تاریخ میلادی جواب می ده . من از تاریخ شمسی استفاده می کنم .

Batman
دوشنبه 01 مرداد 1386, 20:40 عصر
شما تستش کن اگه جواب نداد مشکل رو بگو
از رو خود تاریخ سیستم (میلادی) به راحتی میشه روز رو پیدا کرد

علامت سوال
دوشنبه 01 مرداد 1386, 23:55 عصر
جمعه توی تاریخ میلادی با جمعه توی تاریخ شمسی چه فرقی میکنه؟
هر دو شون توی تقویم یکیه

vcldeveloper
سه شنبه 02 مرداد 1386, 05:49 صبح
جمعه توی تاریخ میلادی با جمعه توی تاریخ شمسی چه فرقی میکنه؟
در تاریخ شمسی جمعه آخر هفته هست و تعطیله، در تاریخ میلادی روز پنجم هفته هست و تعطیل نیست.

Saeid59_m
سه شنبه 02 مرداد 1386, 06:34 صبح
شما تستش کن اگه جواب نداد مشکل رو بگو
از رو خود تاریخ سیستم (میلادی) به راحتی میشه روز رو پیدا کرد
من مشکلم تاریخ جاری که نیست . مثلاً می خوام بدونم 1389/8/6 چند شنبه می شه .
تا ریخ میلادی اون رو هم ندارم .

SYNDROME
سه شنبه 02 مرداد 1386, 07:36 صبح
با سلام

من مشکلم تاریخ جاری که نیست . مثلاً می خوام بدونم 1389/8/6 چند شنبه می شه .
تا ریخ میلادی اون رو هم ندارم .
عزیر دل برادر من در پست دوم به فرمولی اشاره کردم که شما از آن استفاده کنید مشکل حل است و نیاز به تاریخ میلادی نیز ندارید.من تست کردن جواب داد.
موفق باشید

Batman
سه شنبه 02 مرداد 1386, 09:09 صبح
آقا سعید اینم برنامه نمایش روز در یه تاریخ خاص
استفاده از حلقه for : به دلیل refresh شدن تاریخ
منتها تاریخ فعلی سیسمت رو یه جایی ذخیره کن

Saeid59_m
سه شنبه 02 مرداد 1386, 09:19 صبح
آقا سعید اینم برنامه نمایش روز در یه تاریخ خاص
استفاده از حلقه for : به دلیل refresh شدن تاریخ
منتها تاریخ فعلی سیسمت رو یه جایی ذخیره کن
دستت درد نکنه که کمک کردی . ولی برنامه ای که گذاشتی فقط برای تاریخ میلادی درست جواب می ده . برای تاریخ شمسی جواب غلطه . مثلا 1386/05/01 که وارد کردم می نویسه سه شنبه در صورتی که دوشنبه بود .

علامت سوال
سه شنبه 02 مرداد 1386, 09:47 صبح
در تاریخ شمسی جمعه آخر هفته هست و تعطیله، در تاریخ میلادی روز پنجم هفته هست و تعطیل نیست.
آقای کشاورز تا جایی که بنده از سوال ایشون متوجه شدم مشکل تعطیل بودن روزها نیست. مشکل خود روزهای هفته هست.سوال کننده قصدش پیدا کردن روز هفته هست.
در تقویم میلادی و شمسی روز های زیر همیشه معادل هستند و یک روند ثاب هست پس لازم نیست نگران متغیر بودن نتیجه در تاریخ های میلادی و شمسی باشیم
Sat -> شنبه
Sun-> یکشنبه
.
.
.
Fri->جمعه

منظور من این بود...

علامت سوال
سه شنبه 02 مرداد 1386, 10:09 صبح
دستت درد نکنه که کمک کردی . ولی برنامه ای که گذاشتی فقط برای تاریخ میلادی درست جواب می ده . برای تاریخ شمسی جواب غلطه . مثلا 1386/05/01 که وارد کردم می نویسه سه شنبه در صورتی که دوشنبه بود .
سعید جان این برنامه این طور در نظر میگیره که این تاریخ سال 1386 میلادی هست.شما معادل میلادی تاریخت رو به برنامه بده.دوستان قبلا هم متذکر شدند.
در ضمن من قبلا چند تا سورس یا کامپوننت در سایت برای تبدیل تاریخ ها ی میلادی به شمسی و بر عکس دیدم.

Batman
سه شنبه 02 مرداد 1386, 12:48 عصر
خوب میتونی یه کار کنی تاریخ شمسی رو به میلادی تبدیل کنی و بعد برنامه ای رو که نوشتم به صورت یه تابع صدا بزن و روز رو به دست بیار همین
اگه تابع تبدیل رو هم نداری (که حتما داری) بگو تا برات بذارم

golihaghighi
یک شنبه 14 مرداد 1386, 07:06 صبح
از این کد می تونید برای تبدیل تاریخ میلادی به شمسی استفاده کنید.




Function Shamsi(Optional ByVal Date1 As String = "", Optional ByVal SmallDate1 As Boolean = False, Optional ByVal Year4Char As Boolean = True) As String
Dim U, Ym, Rp, D, P, Sd, Ls, Ye, I, Mn, Yy, J, Dd As Integer
'Dim d, p As Integer()
Dim w, Mon, Days As String()
Dim T4, T5, T6 As Integer(,)
'd = New Integer() {20, 19, 20, 20, 21, 21, 22, 22, 22, 22, 21, 21}
'p = New Integer() {11, 12, 10, 12, 11, 11, 10, 10, 10, 9, 10, 10}
w = New String() {"یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"}
T4 = New Integer(,) {{11, 12, 11, 11}, {12, 13, 12, 12}, _
{11, 11, 10, 11}, {13, 12, 12, 12}, _
{12, 11, 11, 11}, {12, 11, 11, 11}, _
{11, 10, 10, 10}, {11, 10, 10, 10}, _
{11, 10, 10, 10}, {10, 9, 9, 9}, _
{11, 10, 10, 10}, {11, 10, 10, 10}}
T5 = New Integer(,) {{20, 19, 20, 20}, {19, 18, 19, 19}, _
{19, 20, 20, 20}, {19, 20, 20, 20}, _
{20, 21, 21, 21}, {21, 21, 21, 21}, _
{21, 22, 22, 22}, {21, 22, 22, 22}, _
{21, 22, 22, 22}, {21, 22, 22, 22}, _
{20, 21, 21, 21}, {20, 21, 21, 21}}
T6 = New Integer(,) {{10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9}, _
{11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}
If SmallDate1 = True Then
Mon = New String() {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"}
Else
Mon = New String() {"فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"}
End If
If SmallDate1 = True Then
Days = New String() {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", _
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"}
Else
Days = New String() {"یکم", "دوم", "سوم", "چهارم", "پنجم", "ششم", "هفتم", "هشتم", "نهم", "دهم", _
"یازدهم", "دوازدهم", "سیزدهم", "چهاردهم", "پانزدهم", "شانزدهم", "هفدهم", "هجدهم", "نوزدهم", "بیستم", _
"بیست و یکم", "بیست و دوم", "بیست و سوم", "بیست و چهارم", "بیست و پنجم", "بیست و ششم", "بیست و هفتم", _
"بیست و هشتم", "بیست و نهم", "سیم", "سی و یکم"}
End If

If Date1 = "" Then
Date1 = Convert.ToString(Date.Now)
End If
Yy = Convert.ToDateTime(Date1).Year
J = Convert.ToDateTime(Date1).Month
Dd = Convert.ToDateTime(Date1).Day
U = 0
Rp = 0
If KabiseM(Yy) = True Then
U = 1
End If
Ym = Yy - 622
If KabiseS(Ym) = True Then
Rp = 1
End If
If (Rp = 0 And U = 1) Then
I = 1
ElseIf (Rp = 1 And U = 0) Then
I = 2
ElseIf (Rp = 0 And U = 0) Then
I = 3
Else
I = 4
End If
D = T4(J - 1, I - 1)
P = T5(J - 1, I - 1)
If Dd <= P Then
Sd = D + Dd - 1
Mn = T6(0, J - 1)
Ls = 1
Else
Sd = Dd - P
Mn = T6(1, J - 1)
Ls = 2
End If
If (J > 3 Or (Ls = 2 And J = 3)) Then
Ye = Yy - 621
Else
Ye = Yy - 622
End If

'****************************
'****************************
If SmallDate1 = True Then
If Year4Char = True Then
Shamsi = Trim(Str(Ye)) + "/" + Trim(Mon(Mn - 1)) + "/" + Trim(Days(Sd - 1))
Else
Shamsi = Mid(Trim(Str(Ye)), 3, 2) + "/" + Trim(Mon(Mn - 1)) + "/" + Trim(Days(Sd - 1))
End If
Else
If Year4Char = True Then
Shamsi = w(Convert.ToDateTime(Date1).DayOfWeek) + " " + Days(Sd - 1) + " " + Mon(Mn - 1) + " " + Str(Ye)
Else
Shamsi = w(Convert.ToDateTime(Date1).DayOfWeek) + " " + Days(Sd - 1) + " " + Mon(Mn - 1) + " " + Mid(Trim(Str(Ye)), 3, 2)
End If
End If
End Function
Function KabiseS(ByVal Year As Integer) As Boolean
Dim s, kkb, x, w As Integer
s = (Year + 16) \ 33
kkb = s * 33 - 16
If kkb + 1 = Year Then
KabiseS = False
Else
x = (Year + 15) \ 33
w = Year - x - 17
If (w Mod 4) = 0 Then
KabiseS = True
Else
KabiseS = False
End If
End If
End Function
Function KabiseM(ByVal Year As Integer) As Boolean
If (Year Mod 100) = 0 Then
If (Year Mod 400) = 0 Then
KabiseM = True
Else
KabiseM = False
End If
Else
If (Year Mod 4) = 0 Then
KabiseM = True
Else
KabiseM = False
End If
End If
End Function

Batman
یک شنبه 14 مرداد 1386, 07:14 صبح
با سلام
جناب gholihaghighi عزیز بهتره نبود به جای این همه کد همون برنامه رو آپلود میکردی
موفق باشی

golihaghighi
یک شنبه 14 مرداد 1386, 07:38 صبح
برنامه چیزای دیگه هم داره که نتونستم آپلودش کنم.

dkhatibi
یک شنبه 14 مرداد 1386, 09:34 صبح
تاریخ میلادی به شمسی و برعکس بارها گفته شده است. من تاریخم را به میلادی تبدیل می کنم و بعد ل=از فرمول گفته شده استفاده می کنم.

Saeid59_m
چهارشنبه 25 مهر 1386, 07:38 صبح
دوستان برای این مسئله راه حلهای زیادی ارائه کرده اند . اما خودم تونستم یه تابع بنویسم که تاریخ شمسی رو دریافت کنه و اعداد 0 تا 6 رو بعنوان خروجی ، به صورتی که 0 معرف "شنبه" ، 1 معرف "یکشنبه" و ... و 6 معرف "جمعه" باشد .

امیدوارم مفید باشه .



Function DayOfWeek_Shamsi (y,m,d:integer):integer;
Var
Sum:int64;
Begin

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:=Sum Mod 7;

End;

delphi5
سه شنبه 18 تیر 1387, 11:07 صبح
روش درست استفاده از تابع DayOfWeek هست ، ولی اول باید تاریخت رو به میلادی تبدیل کنی بعد بهش بدی.
حساب کردن اختلاف تقریبا عملی نیست ، مگر اینکه همه پارامترها ، مثل سالهای کبیسه و تعداد روزهای ماههای مختلف رو در نظر بگیری!



با سلام
من از تابع dayofweek استفاده میکنم اما بدرستی جواب نمی گیرم .من تاریخ میلادی رو با استفاده از keyboard وارد میکنم (فرمت DD/MM/YY) .
کسی میتونه این مشکل رو حل کنه ؟




ADate:=strtodate(trim(dday)+'/'+trim(mmonth)+'/'+copy(trim(myear),3,2));
with ADOTable1 do
begin
Connection:=ADOConnection1;
TableName:='db_dayofweek';
ADOConnection1.Connected:=true;
Active:=true;
first;
don:=false;
don:=Locate('ad'{table field that store number of day like 1,2,...},trim(inttostr(DayOfWeek(ADate))),[Lopartialkey]);
if don then
begin
eweek.Caption:=trim(ADOTable1.fieldbyname('ename') .asstring);
fweek.Caption:=trim(ADOTable1.fieldbyname('fname') .asstring);
end;
First;
Active:=false;
end;

delphi5
سه شنبه 18 تیر 1387, 12:26 عصر
مشکل در فرمت تاریخ بود که با جابجا کردن مقدار روز و سال مشکل حل شد .

masoud.rhb
شنبه 04 بهمن 1393, 09:40 صبح
برنامت اشتباس دادا
1/10/93 میشه دوشنبه این شنبه میده

یوسف زالی
شنبه 04 بهمن 1393, 09:52 صبح
از توابع این لینک (http://barnamenevis.org/showthread.php?397232-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%A8%D8%A7-%D8%AF%D9%82%D8%AA-5000-%D8%B3%D8%A7%D9%84-%D8%AA%D8%B3%D8%AA-%D8%B4%D8%AF%D9%87-%D8%A8%D8%A7-%D8%AA%D9%82%D9%88%DB%8C%D9%85-%D8%B1%D8%B3%D9%85%DB%8C-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86-http-www.time.ir&p=1762790#post1762790) استفاده کنید.

masoud.rhb
شنبه 11 بهمن 1393, 11:19 صبح
Dim MyCalendar As New System.Globalization.PersianCalendar
Result = Date.Now.ToShortDateString
((((Result = MyCalendar.GetDayOfWeek(New Date(CInt(Result.Split("/")(0)), CInt(Result.Split("/")(1)), CInt(Result.Split("/")(2
Select Case Result
Case 6
Result = "شنبه"
Case 0
Result = "یکشنبه"
Case 1
Result = "دوشنبه"
Case 2
Result = "سه شنبه"
Case 3
Result = "چهارشنبه"
Case 4
Result = "پنج شنبه"
Case 5
Result = "جمعه"
End Select

دلفــي
یک شنبه 12 بهمن 1393, 10:55 صبح
يه برنامه اي قبلا در اين زمينه نوشته بودم ، فايل اجراييش رو مي توني از لينك زير دانلود كني
ببين اگه منظورت همينه كه من نوشتم كدشو برات از آرشيوم بگردم پيدا كنم

http://uplod.ir/xpacvv7ovz4p/Date2Date.zip.htm

h_mohamadi
یک شنبه 03 اسفند 1393, 09:57 صبح
دوستان فانکشنی که کاملا جواب می دهد
Function DayOfWeek_Shamsi(Tarikh:String):String;
Var
Sum:int64;
day:String;
y,m,d:integer;
Begin

IF Length(Tarikh)=6 THEN
begin
y:=StrToInt(copy(Tarikh,1,2));
m:=StrToInt(copy(Tarikh,3,2));
d:=StrToInt(copy(Tarikh,5,2));
end
else
IF Length(Tarikh)=8 THEN
begin
y:=StrToInt(copy(Tarikh,1,2));
m:=StrToInt(copy(Tarikh,4,2));
d:=StrToInt(copy(Tarikh,7,2));
end;


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;

End;

دلفــي
دوشنبه 04 اسفند 1393, 08:37 صبح
دوستان فانکشنی که کاملا جواب می دهد
Function DayOfWeek_Shamsi(Tarikh:String):String;
Var
Sum:int64;
day:String;
y,m,d:integer;
Begin

IF Length(Tarikh)=6 THEN
begin
y:=StrToInt(copy(Tarikh,1,2));
m:=StrToInt(copy(Tarikh,3,2));
d:=StrToInt(copy(Tarikh,5,2));
end
else
IF Length(Tarikh)=8 THEN
begin
y:=StrToInt(copy(Tarikh,1,2));
m:=StrToInt(copy(Tarikh,4,2));
d:=StrToInt(copy(Tarikh,7,2));
end;


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;

End;



براي تاريخ 13931204 خروجي سه شنبه ميده كه درست نيست !