PDA

View Full Version : سوال: کار با تاریخ



majidsoft
سه شنبه 24 شهریور 1388, 17:08 عصر
با سلام و خسته نباشید
من دارم یک برنامه دارم برای کار با مرخصی حالا می خواستم کدی بنویسم که هر ماه یکبار مثلا 2 روز را به ذخیره مرخصی افراداضافه کنه کدی می خواستم که اختلاف بین دو تاریخ را محاسبه کنه و در اول هر ماه اینکار را انجام بده
با تشکر

fazelm
سه شنبه 24 شهریور 1388, 19:37 عصر
با سلام و خسته نباشید
من دارم یک برنامه دارم برای کار با مرخصی حالا می خواستم کدی بنویسم که هر ماه یکبار مثلا 2 روز را به ذخیره مرخصی افراداضافه کنه کدی می خواستم که اختلاف بین دو تاریخ را محاسبه کنه و در اول هر ماه اینکار را انجام بده
با تشکر

تاریخ رو به صورت عدد 8رقمی(13880101) بنویس و از کوچک تری و بزرگتری استفاده کن.

majid_vb_2008
سه شنبه 24 شهریور 1388, 21:30 عصر
دوست من مي توني با استفاده از كد زير استفاده كني


strsql = "Select * From Tabel Where Tarekh BETWEEN '" &Textbox1.Text & "' AND '" & Textbox2.Text & "'"


فقط يادت باشه همونجوري كه دوستمون گفت تاريخ بايد بصورت 8 رقمي ذخيره شده باشه كه براي اونم يك راه بلم اگه خواستي بگو بزارم

majidsoft
چهارشنبه 25 شهریور 1388, 09:17 صبح
با تشکر از شما دوستان گرامی
باید بگویم که من تاریخ را وارد نمی کنم و خود برنامه هنگام اجرا باید تاریخ را چک کند اگر به اول ماه رسیده باشد یا از اول ماه گذشته باشد(یعنی در اول ماه برنامه اجرا نگردد و چند روز بعد برنامه اجرا شود)خودکار به تمامی افراد در دیتابیس آن مقدار را اضافه کند

fazelm
چهارشنبه 25 شهریور 1388, 09:35 صبح
با تشکر از شما دوستان گرامی
باید بگویم که من تاریخ را وارد نمی کنم و خود برنامه هنگام اجرا باید تاریخ را چک کند اگر به اول ماه رسیده باشد یا از اول ماه گذشته باشد(یعنی در اول ماه برنامه اجرا نگردد و چند روز بعد برنامه اجرا شود)خودکار به تمامی افراد در دیتابیس آن مقدار را اضافه کند

اولا شما باید شماره آخرین ماه و سالتون رو یه جا تو برنامه یادداشت کنید (به صورت 138801 )

شما باید شرطی برای اضافه کردن مرخصی برای برنامه تعریف کنی :

چک کنه این سال و ماه در برنامه قبلا ثبت شده یا نه ؟؟
اگر ثبت شده بود که هیچ
در غیر این صورت :
به تمام افراد مرخصی اضافه کن

متوجه منظورم شدید ؟؟ یا به توضیح بیشتر نیاز دارید ؟؟
در هر صورت در خدمتم

majidsoft
چهارشنبه 25 شهریور 1388, 23:59 عصر
با سلام ببین دوست عزیز من اصلا کار به سال ندارم می خوام برنامه هنگام اجرا چک کنه اگه اول ماه است به ذخیره مرخصی مثلا 2 روز اضافه کنه

DoDoklak
پنج شنبه 26 شهریور 1388, 09:01 صبح
من خودم از یه سری توابع استفاده میکنم اینجا میزارم شاید به دردت بخوره

ورودی تمام توابع بصورت yyyy/mm/dd باید باشه و خروجی نیز بای همین فرمت است
این توابع روزهای کبیسه را هم محاسبه میکنند وبا کم وزیاد کردن روز ،ماه و سال رو اصلاح میکنه

تابع اضافه کردن یک روز



PublicFunction ADDDAY(ByVal dat AsString) AsString
Dim y AsString = dat.Substring(0, 4).ToString
Dim m AsString = dat.Substring(5, 2).ToString
Dim d AsString = dat.Substring(8, 2).ToString
Dim ps AsNew Globalization.PersianCalendar
Dim CountDay AsInteger = ps.GetDaysInMonth(y, m, 1)
'''''''''''''''''''''''''''''''''''''''''''''''''' ''
If (1 + CInt(d)) <= CountDay Then
If m.Length <= 1 Then m = "0" + m
d = CStr((CInt(d) + 1))
If d.Length <= 1 Then d = "0" + d
ElseIf (1 + CInt(d)) > CountDay Then
If (CInt(m) + 1) <= 12 Then
m = (CInt(m) + 1)
If m.Length <= 1 Then m = "0" + m
d = "01"
ElseIf (CInt(m) + 1) > 12 Then
m = "01"
d = "01"
y = (CInt(y) + 1)
EndIf
EndIf
'''''''''''''''''''''''''''''''''''''''''''''''''' '''
Return y & "/" & m & "/" & d
EndFunction


تابع کم کردن یک روز



PublicFunction DECDAY(ByVal dat AsString) AsString
Dim y AsString = dat.Substring(0, 4).ToString
Dim m AsString = dat.Substring(5, 2).ToString
Dim d AsString = dat.Substring(8, 2).ToString
Dim ps AsNew Globalization.PersianCalendar
Dim CountDay AsInteger = ps.GetDaysInMonth(y, m, 1)
'''''''''''''''''''''''''''''''''''''''''''''''''' ''
If (CInt(d) - 1) >= 1 Then
If m.Length <= 1 Then m = "0" + m
d = CStr((CInt(d) - 1))
If d.Length <= 1 Then d = "0" + d
ElseIf (CInt(d) - 1) < 1 Then
If (CInt(m) - 1) >= 1 Then
m = (CInt(m) - 1)
If m.Length <= 1 Then m = "0" + m
CountDay = ps.GetDaysInMonth(y, m, 1)
d = CountDay
ElseIf (CInt(m) - 1) < 1 Then
m = "12"
y = (CInt(y) - 1)
CountDay = ps.GetDaysInMonth(y, m, 1)
d = CountDay
EndIf
EndIf
'''''''''''''''''''''''''''''''''''''''''''''''''' '''
Return y & "/" & m & "/" & d
EndFunction


تابع گرفتن تاریخ شمسی سیستم



PublicFunction ShamsiDate() AsString
Dim ps AsNew Globalization.PersianCalendar()
Dim y AsString = ps.GetYear(DateTime.Now)
Dim m AsString = ps.GetMonth(DateTime.Now)
Dim d AsString = ps.GetDayOfMonth(DateTime.Now)
If y.Length <= 1 Then y = "0" + y
If m.Length <= 1 Then m = "0" + m
If d.Length <= 1 Then d = "0" + d
Return y & "/" & m & "/" & d
EndFunction


تابع محاسبه اختلاف بین دوتا تاریخ خروجی یک عدد است



Public Function SUBDAY(ByVal dat2 As String, ByVal dat1 As String) As Long
Dim y1 As String = dat1.Substring(0, 4).ToString
Dim m1 As String = dat1.Substring(5, 2).ToString
Dim d1 As String = dat1.Substring(8, 2).ToString
'''''''''''''''''''''''''''''''''''''''''''''''''' '
Dim y2 As String = dat2.Substring(0, 4).ToString
Dim m2 As String = dat2.Substring(5, 2).ToString
Dim d2 As String = dat2.Substring(8, 2).ToString
'''''''''''''''''''''''''''''''''''''''''''''''''
Dim ps As New Globalization.PersianCalendar
Dim CountDay1 As Integer = ps.GetDaysInMonth(y1, m1, 1)
Dim CountDay2 As Integer = ps.GetDaysInMonth(y2, m2, 1)

If dat2 = dat1 Then Return 0
If dat2 > dat1 Then
Dim result As Long = 0
Dim flag As Boolean = True
Do While flag
If (CInt(d2) - 1) >= 1 Then
If m2.Length <= 1 Then m2 = "0" + m2
d2 = CStr((CInt(d2) - 1))
If d2.Length <= 1 Then d2 = "0" + d2
ElseIf (CInt(d2) - 1) < 1 Then
If (CInt(m2) - 1) >= 1 Then
m2 = (CInt(m2) - 1)
If m2.Length <= 1 Then m2 = "0" + m2
d2 = CountDay2
ElseIf (CInt(m2) - 1) < 1 Then
m2 = "12"
d2 = CountDay2
y2 = (CInt(y2) - 1)
End If
End If
If (y2 & "/" & m2 & "/" & d2) = dat1 Then
result += 1
flag = False
Else
result += 1
flag = True
End If
Loop
Return result
ElseIf dat1 > dat2 Then
Dim result As Long = 0
Dim flag As Boolean = True
Do While flag
If (CInt(d1) - 1) >= 1 Then
If m1.Length <= 1 Then m1 = "0" + m1
d1 = CStr((CInt(d1) - 1))
If d1.Length <= 1 Then d1 = "0" + d1
ElseIf (CInt(d1) - 1) < 1 Then
If (CInt(m1) - 1) >= 1 Then
m1 = (CInt(m1) - 1)
If m1.Length <= 1 Then m1 = "0" + m1
d1 = CountDay1
ElseIf (CInt(m1) - 1) < 1 Then
m1 = "12"
d1 = CountDay1
y1 = (CInt(y1) - 1)
End If
End If
If (y1 & "/" & m1 & "/" & d1) = dat2 Then
result -= 1
flag = False
Else
result -= 1
flag = True
End If
Loop
Return result
End If
End Function



اگر برای اضافه کردن ماه و سال هم خواستی بگو همینجا میزارم

mlf_mlv
پنج شنبه 26 شهریور 1388, 10:16 صبح
من وقت نکردم کد اضافه شدن رو کامل بخونم ولی حواستون باشه اگه تو یه روز دوبار وارد برنامه بشیم دوبار مرخصی اضافه نکنه!!

majidsoft
پنج شنبه 26 شهریور 1388, 23:27 عصر
با تشکر از توجه همه دوستان ولی سوال من چیز دیگری است من می خواهم برنامه هنگام اجرا چک کند که آیا اول ماه است یا نه و همچنین اگر برنامه دوبار در اول ماه اجرا شد تشخیص بدهد یا حتی اگر در اول ما هاجرا نشد و مثلا در روز سوم از ماه اجرا شد باز چک کند ببیند که آیا برنامه در اول ماه 2 روز را به افراد اضافه کرده است یا خیر