سلام
دوستان کسی فرمول بدست آوردن ایام هفته را ندارد ؟
1386/5/1 --------> دوشنبه
سلام
دوستان کسی فرمول بدست آوردن ایام هفته را ندارد ؟
1386/5/1 --------> دوشنبه
با سلام
1-اول فاصله دو تا تاریخ را به دست بیاور
2-سپس باقی مانده عدد به دست آمده تقسیم بر 7 را به دست بیاور.
3-سپس به عداد روزها باقی مانده به روز مورد نظر اضافه کن.
مثال :تاریخ اول را تاریخ خودت را انتخاب کردم.
تاریخ دوم : 1/6/1386
1-اختلاف : 31
2-باقی مانده 31 تقسیم بر 7 : 3
3-3 روز به دوشنبه اضافه می کنم :پنج شنبه
موفق باشی
روش درست استفاده از تابع DayOfWeek هست ، ولی اول باید تاریخت رو به میلادی تبدیل کنی بعد بهش بدی.
حساب کردن اختلاف تقریبا عملی نیست ، مگر اینکه همه پارامترها ، مثل سالهای کبیسه و تعداد روزهای ماههای مختلف رو در نظر بگیری!
در ادامه صحبتهای آقای ghabil
بدست آوردن روز هفته dayofweek و استفاده از دستور case
در ضمن یکشنبه اولین روز هفته هستش
case dayofw
0:sunday;
1:monday;
موفق باشی
...
دوستان من قبلاً فرمولش رو داشتم . ولی حالا دقیق یادم نیست
اینطور بود که هر ماه رو + یک عدد ثابت می کردی و حاصل رو تقسیم بر 7 میکردیم . باقی مانده می شد حاصل . اگه کسی اون جدول رو داره . لطف کنه . ممنون
آقا سعید وقتی از همین راه میشه مشکل رو برطرف کرد دیگه چرا راه حل دیگری رو امتحان کنیم
شما تستش کن اگه جواب نداد مشکل رو بگو
از رو خود تاریخ سیستم (میلادی) به راحتی میشه روز رو پیدا کرد
جمعه توی تاریخ میلادی با جمعه توی تاریخ شمسی چه فرقی میکنه؟
هر دو شون توی تقویم یکیه
در تاریخ شمسی جمعه آخر هفته هست و تعطیله، در تاریخ میلادی روز پنجم هفته هست و تعطیل نیست.جمعه توی تاریخ میلادی با جمعه توی تاریخ شمسی چه فرقی میکنه؟
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
آقا سعید اینم برنامه نمایش روز در یه تاریخ خاص
استفاده از حلقه for : به دلیل refresh شدن تاریخ
منتها تاریخ فعلی سیسمت رو یه جایی ذخیره کن
آقای کشاورز تا جایی که بنده از سوال ایشون متوجه شدم مشکل تعطیل بودن روزها نیست. مشکل خود روزهای هفته هست.سوال کننده قصدش پیدا کردن روز هفته هست.
در تقویم میلادی و شمسی روز های زیر همیشه معادل هستند و یک روند ثاب هست پس لازم نیست نگران متغیر بودن نتیجه در تاریخ های میلادی و شمسی باشیم
Sat -> شنبه
Sun-> یکشنبه
.
.
.
Fri->جمعه
منظور من این بود...
خوب میتونی یه کار کنی تاریخ شمسی رو به میلادی تبدیل کنی و بعد برنامه ای رو که نوشتم به صورت یه تابع صدا بزن و روز رو به دست بیار همین
اگه تابع تبدیل رو هم نداری (که حتما داری) بگو تا برات بذارم
از این کد می تونید برای تبدیل تاریخ میلادی به شمسی استفاده کنید.
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
با سلام
جناب gholihaghighi عزیز بهتره نبود به جای این همه کد همون برنامه رو آپلود میکردی
موفق باشی
برنامه چیزای دیگه هم داره که نتونستم آپلودش کنم.
تاریخ میلادی به شمسی و برعکس بارها گفته شده است. من تاریخم را به میلادی تبدیل می کنم و بعد ل=از فرمول گفته شده استفاده می کنم.
دوستان برای این مسئله راه حلهای زیادی ارائه کرده اند . اما خودم تونستم یه تابع بنویسم که تاریخ شمسی رو دریافت کنه و اعداد 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;
با سلام
من از تابع 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;
مشکل در فرمت تاریخ بود که با جابجا کردن مقدار روز و سال مشکل حل شد .
برنامت اشتباس دادا
1/10/93 میشه دوشنبه این شنبه میده
از توابع این لینک استفاده کنید.
توابع تبدیل تاریخ با دقت 5000 سال
پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840
پایگاه داده، تیونینگ، طراحی و پیاده سازی ..
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
آخرین ویرایش به وسیله masoud.rhb : شنبه 11 بهمن 1393 در 11:36 صبح
يه برنامه اي قبلا در اين زمينه نوشته بودم ، فايل اجراييش رو مي توني از لينك زير دانلود كني
ببين اگه منظورت همينه كه من نوشتم كدشو برات از آرشيوم بگردم پيدا كنم
http://uplod.ir/xpacvv7ovz4p/Date2Date.zip.htm
دوستان فانکشنی که کاملا جواب می دهد
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;