|
|
-
ฟังก์ชั่น เกี่ยวกับวันที่ เวลา
- Sub ValidDate(txtDate As TextBox)
- '-------------------------------------------
- 'Call: Tetdate TextBox
- ' eg. ValidDate(txtdate) วางซับโปรแกรมนี้ภายใต้ LostFocus ของ textbox
- ' เพื่อตรวจสอบว่าข้อมูลที่ป้อนเป็นข้อมูลวันที่
- '-------------------------------------------
- With txtDate
- If Not IsDate(.Text) And .Text <> "" Then
- MsgBox "This must be a valid date", 48, "Incorrect Value"
- .Text = Date
- .SetFocus
- End If
- End With
- End Sub
-
- Function DD_StartOfMonth(p_d As Variant) As Variant
- '------------------------------------------------
- '+D=DD_StartOfMonth(p_d) return start of month
- '
- ' Desc:
- '
- ' Call: p_d date
- '
- ' Ret : D start of month
- '
- '------------------------------------------------
-
- If IsNull(p_d) Then
- DD_StartOfMonth = p_d
- Else
- DD_StartOfMonth = p_d - Day(p_d) + 1
- End If
-
- End Function
-
- Sub DD_NumberBetweenDates(p_dStart As Variant, p_dDue As Variant, p_nDays As Long, p_nMonths As Long, p_nYears As Integer)
- '------------------------------------------------
- '+DD_NumberBetweenDates(p_dStart,p_dDue,@p_nDays,@p_nMonths,@p_nYears) get number of days/mths/yrs between dates
- '
- ' Call: p_dStart start date
- ' p_dDue end date
- '
- ' Ret : p_nDays number of days between p_dStart and p_dDue
- ' p_nMonths number of months
- ' p_nYears number of years
- '
- '------------------------------------------------
-
- Dim idy1 As Integer, idy2 As Integer, imth1 As Integer, imth2 As Integer
- Dim iyr1 As Integer, iyr2 As Integer, i As Integer
-
- p_nDays = p_dDue - p_dStart
-
- If p_nDays <= 0 Then
- p_nDays = 0
- p_nMonths = 0
- p_nYears = 0
- Else
- idy1 = Day(p_dStart)
- imth1 = Month(p_dStart)
- iyr1 = Year(p_dStart)
- idy2 = Day(p_dDue)
- imth2 = Month(p_dDue)
- iyr2 = Year(p_dDue)
-
- p_nMonths = 12 * (iyr2 - iyr1) + (imth2 - imth1) + CL_iif(idy2 - idy1 < 0, -1, 0)
- i = imth2 - imth1
- If i < 0 Then
- p_nYears = -1
- ElseIf i = 0 Then
- p_nYears = CL_iif(idy2 - idy1 <= 0, -1, 0)
- Else
- p_nYears = 0
- End If
- p_nYears = iyr2 - iyr1 + p_nYears
- End If
- End Sub
-
- Function DD_WeekofMonth(p_date As Date)
- ''เป็นการหาว่าวันที่ p_date อยู่ในสัปดาห์ไหนของเดือน
- ' ค่าที่เป็นไปได้ คือ 1 2 3 4 5 6
- ' Ret สัปดาห์ที่ ของเดือน เช่น date =9/27/99
- ' ค่าที่สังกลับ จะเป็น 5 คือ สัปดาห์ที่ 5 นั้นเอง
-
- Dim uSTdate, uEndDate, iNumday%
- uSTdate = Weekday(DD_StartOfMonth(p_date)) - 1
- uEndDate = 7 - Weekday(p_date)
- DD_WeekofMonth = Val((Day(p_date) + uSTdate + uEndDate) / 7)
- End Function
-
- Function DD_DateFromWeekofMonth(p_Week%, p_date As Date, Optional nWeekday%)
- '+Call p_Week ค่าที่เป็นไปได้มี 1, 2,3,4,5,6
- ' p_date วันที่
- ' nWeekday ค่าที่เป็นไปได้ คือ 1 (อาทิตย์) 2(จันทร์) 3(อังคาร) 4(พุธ) 5(พฤหัสบดี) 6(ศุกร)์ 7(เสาร์)
- ' Ret : ถ้า p_date = 27/09/99 ต้องการทราบว่า สัปดาห์ที่ 2 (p_Week) ตรงกับวันที่เท่าไรโดยใช้ p_date เป็นฐานวันที่อ้างอิง
- ' ค่าที่ได้คือ วันที่ 6/9/99 ถ้าค่าที่ได้น้อยกว่า เดือน p_date จะส่งค่า กลับเป็นวันแรกของเดือน
- ' ถ้าค่าที่ได้มากกว่าเดือน p_date จะส่งค่ากลับเป็นวันสุดท้ายของเดือน
- '
- 'จุดประสงค์ คือถ้าต้องการทราบว่า สัปดาห์ที่ 3 (p_Week) ที่ตรงกับวัน ศุกร(nweekday = 6) ของ วันที่ 9/27/99 (p_date) ตรงกับวันที่เท่าไร
- ' ?DD_DateFromWeekofMonth(3, Date, 6)
- ' 9/17/99
- '---------------------------------------
- Dim nWeekofMonth% 'เก็บค่าของช่วงสัปดาห์ของวันที่ p_date ว่าอยู่ในช่วงของสัปดาห์ที่เท่าไร
- Dim nNumofWeek
- Dim iWeekday
-
- nWeekofMonth = DD_WeekofMonth(p_date)
- nNumofWeek = DateAdd("d", (p_Week - nWeekofMonth) * 7, p_date)
-
- If IsMissing(nWeekday) = True Then 'ไม่ส่งค่าได
- DD_DateFromWeekofMonth = nNumofWeek
- Else
- iWeekday = DD_StartOfWeek(nNumofWeek)
- nNumofWeek = DateAdd("d", nWeekday - 1, CDate(iWeekday))
- DD_DateFromWeekofMonth = nNumofWeek
-
- End If
- If nNumofWeek < DD_StartOfMonth(p_date) Then
- DD_DateFromWeekofMonth = DD_StartOfMonth(p_date)
- ElseIf nNumofWeek >= MonthEnd(p_date) Then
- DD_DateFromWeekofMonth = MonthEnd(p_date)
- End If
-
- End Function
|
.
|