หน้าหลัก     วิชวลเบสิค     บริหารงานบุคคล     บริหารความก้าวหน้า     บริหารการทำงาน     คิดค่าชั่วร้านเน็ต     โพโต้ ลิงค์  
.

หน้าหลัก

Vb main
Download
Web Board
Link Lists

การกระซับข้อมูล
ฟังก์ชั่นเกี่ยวกับ ListBox
Edit ListBox
เกี่ยวกับ TextBox
เกี่ยวกับ ComboBox
เกี่ยวกับ MSFlexGrid
เกี่ยวกับตัวอักษร
เกี่ยวกับวันที่ เวลา

ฟังก์ชั่น เกี่ยวกับวันที่ เวลา



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

.
. .
. Copy right(C)1999 by Amnart Viengkham. .