Trang 1 trên 1

Tìm ngày theo điều kiện (VD: ngày thứ CN thứ 2 của tháng 5)

Đã gửi: T.Ba 15/09/2009 12:14 pm
gửi bởi truongphu
Thủ thuật: Tìm ngày theo điều kiện
Tác giả: truongphu
Mô tả: Tìm ngày theo điều kiện (VD: ngày thứ CN thứ 2 của tháng 5


Vấn đề: Ngày của Mẹ (Mother's Day) là ngày không cố định, đó là ngày Chủ Nhật thứ 2 của tháng 5 (còn nhiều ngày lễ khác cũng vậy...), vậy làm sao xác định được ngày đó theo từng năm
Giải quyết: viết 1 hàm, không biết đúng không chứ chạy OK, các bác có ai có cách gọn hơn thì post lên nha :D
Hàm đây

Mã: Chọn hết

  1. Function FindDay(Ngày As Byte, LânMây As Byte, Tháng As Byte, Nam As Integer) As Date
  2. ' CN Ngày = 1, Thu' Hai = 2 ...
  3. Dim aa As Date
  4.     aa = CDate(Tháng & "/" & 1 & "/" & Nam)
  5.         Select Case Weekday(aa) - Ngày
  6.             Case 0: FindDay = aa + 7 * (LânMây - 1)
  7.             Case Is > 0: FindDay = aa + 7 * LânMây - Weekday(aa) + Ngày
  8.             Case Else: FindDay = aa + 7 * (LânMây - 1) - Weekday(aa) + Ngày
  9.         End Select
  10. End Function


Cách sử dụng:

Mã: Chọn hết

  1. Private Sub Command1_Click()
  2. ' Hôm nay là thu' 3 lâ`n thu' 3 cua tháng 9 nam 2009 (9/15/2009)
  3. MsgBox FindDay(3, 3, 9, 2009)
  4. ' Mother Day nam 2009 là chu nhât (1) la6`n thu' 2 cua tháng 5
  5. MsgBox FindDay(1, 2, 5, 2009)
  6. End Sub



Đã Sửa

Re: Tìm ngày theo điều kiện (VD: ngày thứ CN thứ 2 của tháng 5)

Đã gửi: T.Ba 15/09/2009 1:07 pm
gửi bởi clarkkent
hình như ra không đúng :|

Re: Tìm ngày theo điều kiện (VD: ngày thứ CN thứ 2 của tháng 5)

Đã gửi: T.Ba 15/09/2009 4:10 pm
gửi bởi truongphu
Giờ thì OK

Re: Tìm ngày theo điều kiện (VD: ngày thứ CN thứ 2 của tháng 5)

Đã gửi: T.Ba 15/09/2009 4:35 pm
gửi bởi clarkkent
lần này kết quả khác nhưng vẫn sai :|

Re: Tìm ngày theo điều kiện (VD: ngày thứ CN thứ 2 của tháng 5)

Đã gửi: T.Ba 15/09/2009 4:52 pm
gửi bởi truongphu
Có 2 phần: Code VB6 và Code ứng dụng hơi khác nhau
Tuy nhiên tôi đã test êm mà ??
22.JPG


Có lẽ bạn Clarkkent dùng phiên bản cũ (tôi đã xóa)

Ngày cuối tháng trước

Đã gửi: T.Tư 16/09/2009 3:19 pm
gửi bởi truongphu

Mã: Chọn hết

  1. Option Explicit
  2.  
  3. Function EndMonth(dt)
  4.     EndMonth = DateSerial(Year(dt), Month(dt), 0)
  5. End Function
  6.  
  7. Private Sub Command1_Click()
  8.     MsgBox EndMonth(#1/15/2006#)
  9.     MsgBox EndMonth(#3/1/2000#)
  10.     MsgBox EndMonth(Date)
  11. End Sub

Re: Tìm ngày theo điều kiện (VD: ngày thứ CN thứ 2 của tháng

Đã gửi: T.Ba 11/05/2010 10:54 pm
gửi bởi truongphu
viết lại:
  1. Private Sub Command1_Click()
  2.     Dim KêtQua As Date
  3.     KêtQua = TìmNgàyThuTrongTháng(Combo1.Text, Combo2.Text, _
  4.     Combo3.Text, Combo4.Text)
  5.     If Month(KêtQua) > CInt(Combo3.Text) Then
  6.         Calendar1.Day = Day(KêtQua - 7)
  7.     Else
  8.         Calendar1.Day = Day(KêtQua)
  9.     End If
  10.     MsgBox Format(KêtQua, "dddd d-MMM-yyyy"), vbOKOnly, _
  11.     "Thông báo ngày tìm theo format dddd d-MMM-yyyy"
  12. End Sub
  13.  
  14. Private Sub Combo3_Click()
  15.     Calendar1.Month = Combo3.Text
  16. End Sub
  17.  
  18. Private Sub Combo4_Click()
  19.     Calendar1.Year = Combo4.Text
  20. End Sub
  21.  
  22. Function TìmNgàyThuTrongTháng( _
  23.     ByVal NgàyThuTìm As VbDayOfWeek, _
  24.     ByVal LânThuMây As Byte, _
  25.     ByVal Thángnào As Byte, _
  26.     Optional ByVal Nam As Integer = 2010, _
  27.     Optional ByVal NgàyÐâuTuân As VbDayOfWeek = vbSunday) _
  28.     As Date
  29.     ' code truongphu
  30. ' NgàyThuTìm: vbSunday = 1, vbMonday = 2, ..., vbSarturday = 7
  31. ' LânThuMây: 1, 2, 3, 4,5
  32. ' Thángnào: 1, 2, 3, ..., 12
  33. ' Nam: 1985, ...2007, ... hiên tai 2010 thì bo trô'ng
  34. ' NgàyÐâuTuân: 1 (Sunday), ... default = 1 = bo trô'ng
  35. Dim ÐâuTháng As Date:   ÐâuTháng = CDate(Thángnào & "/1/" & Nam)
  36. Dim CáchThu As Long:    CáchThu = NgàyThuTìm - Weekday(ÐâuTháng)
  37. If CáchThu < 0 Then
  38.     TìmNgàyThuTrongTháng = ÐâuTháng + CáchThu + LânThuMây * 7
  39. Else
  40.     TìmNgàyThuTrongTháng = ÐâuTháng + CáchThu + (LânThuMây - 1) * 7
  41. End If
  42.     If Month(TìmNgàyThuTrongTháng) > Thángnào Then _
  43.     MsgBox "Thu' " & NgàyThuTìm & " Lâ`n thu' " & LânThuMây & _
  44.     " trong tháng " & Thángnào & "/" & Nam & _
  45.     " không có, qua tháng sau!", vbOKOnly, "Thông Báo"
  46. End Function
  47.  
  48. Private Sub Form_Load()
  49.     Dim i As Integer
  50.     For i = 1 To 7
  51.         Combo1.AddItem i
  52.     Next
  53.     Combo1.ListIndex = 0
  54.     For i = 1 To 5
  55.         Combo2.AddItem i
  56.     Next
  57.     Combo2.ListIndex = 0
  58.     For i = 1 To 12
  59.         Combo3.AddItem i
  60.     Next
  61.     Combo3.ListIndex = 0
  62.     For i = 1975 To 2020
  63.         Combo4.AddItem i
  64.     Next
  65.     Combo4.ListIndex = 35
  66. End Sub
  67.  

Ngày lễ Hoa Kỳ: Father Day và Mother Day

Đã gửi: T.Năm 29/07/2010 7:13 pm
gửi bởi truongphu
  1. ' Chu nhât thu 3 cua tháng 6
  2. Private Function FatherDay(Nam As String) As Date
  3. Dim tháng6 As Date  ' code truongphu
  4. tháng6 = CDate("6/21/" & Nam)
  5.  If (tháng6 - Weekday(tháng6) + 1) > tháng6 Then FatherDay = tháng6 - Weekday(tháng6) + 1 - 7 Else FatherDay = tháng6 - Weekday(tháng6) + 1
  6. End Function
  7.  
  8. ' Chu nhât thu 2 cua tháng 5
  9. Private Function MotherDay(Nam As String) As Date
  10. Dim tháng5 As Date  ' code truongphu
  11. tháng5 = CDate("5/14/" & Nam)
  12.  If (tháng5 - Weekday(tháng5) + 1) > tháng5 Then MotherDay = tháng5 - Weekday(tháng5) + 1 - 7 Else MotherDay = tháng5 - Weekday(tháng5) + 1
  13. End Function