PDA

View Full Version : چطور میشه برنامه هفتگی نوشت؟



Developer Programmer
دوشنبه 01 تیر 1388, 20:23 عصر
الان چند روزه که روی این برنامه دارم معلق میزنم :افسرده:

یه شرکتی، واسه هر هفته از سال، برنامه کاری مینویسه مثلا واسه هفته 22 امسال فلان کار انجام بشه، واسه هفته 12 امسال فلان کارها...

حالا من میخوام عدد هفته سال، رو بگیرم تشخیص بدم که اون هفته از چه تاریخی شروع میشه و تا چه تاریخی ادامه داره. تا واسه هر روز از اون هفته یه برنامه کاری ثبت کنم.
کسی میتونه کمکی کنه ؟ راستی لازمه که اولین روز سال رو هم داشته باشم یا نه ؟

tdkhakpur
دوشنبه 01 تیر 1388, 20:35 عصر
سلام
خوب از اول سال تا هفته مورد نظر را به روز تبدیل کرده سپس این مقدار روز را به ماه و باقیمانده را روز مربوط به اون تاریخ در نظر بگیرید.

ab_ba
سه شنبه 02 تیر 1388, 09:26 صبح
اگر تاریخ شروع اولین هفته را داشته باشیم باید به ازای هر هفته به این تاریخ 7 روز اضافه کنیم مثلا هفته 30 ام باید 29*7 یعنی 203 روز



Function adddate(date1 As Long, k As Long, kabiseh As Boolean) As Long
If date1 Mod 10000 = 1229 And kabiseh Then
adddate = (date1 \ 10000) * 10000 + 1230
Else
adddate = num2year(year2num(date1) + k)
End If
End Function
Function num2year(k As Long) As Long
Dim i As Long
Dim d As Long
Dim m As Long
Dim Y As Long
Y = (k \ 365)
i = k - (Y * 365)
If i = 0 Then
num2year = (Y * 10000) + 12 * 100 + 29
Else
If i > 186 Then
If i - 186 - (((i - 186) \ 30) * 30) = 0 Then
m = 6 + ((i - 186) \ 30)
d = 30
Else
m = 6 + ((i - 186) \ 30) + 1
d = i - 186 - (((i - 186) \ 30) * 30)
End If
Else
If i - ((i \ 31) * 31) = 0 Then
m = (i \ 31)
d = 31
Else
m = (i \ 31) + 1
d = i - ((i \ 31) * 31)
End If
End If
num2year = (Y + 1) * 10000 + m * 100 + d
End If
End Function

Reza_Yarahmadi
سه شنبه 02 تیر 1388, 16:32 عصر
میتونید از خواص DateTime استفاده کنید
توی مثال زیر هفته اول همون هفته ای است که روز اول سال در اون قرار داره.


DateTime StartDate = new DateTime(2009, 1, 1);
int FirstWeekRemain = 7 - Convert.ToInt16(StartDate.DayOfWeek);

DateTime WeekFirst, weekEnd;
int WeekNumber;

WeekNumber = 22;
WeekNumber--;
WeekFirst = StartDate.AddDays(--WeekNumber * 7 + FirstWeekRemain);
weekEnd = WeekFirst.AddDays(6);
MessageBox.Show(WeekFirst.ToString());
MessageBox.Show(weekEnd.ToString());
برای تاریخ شمسی هم میتونید از همین روش استفاده کنید