• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

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

Các thủ thuật liên quan đến xử lý chuỗi và thời gian
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Ba 15/09/2009 12:14 pm

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
Sửa lần cuối bởi truongphu vào ngày T.Ba 15/09/2009 1:34 pm với 1 lần sửa.


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

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

Gửi bàigửi bởi clarkkent » T.Ba 15/09/2009 1:07 pm

hình như ra không đúng :|
Tập tin đính kèm
findday.PNG
findday.PNG (10 KiB) Đã xem 2833 lần
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Ba 15/09/2009 4:10 pm

Giờ thì OK
Tập tin đính kèm
Find Day.rar
(620 Byte) Đã tải 360 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

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

Gửi bàigửi bởi clarkkent » T.Ba 15/09/2009 4:35 pm

lần này kết quả khác nhưng vẫn sai :|
Tập tin đính kèm
findday2.PNG
findday2.PNG (10.14 KiB) Đã xem 2813 lần
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Ba 15/09/2009 4:52 pm

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)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Tư 16/09/2009 3:19 pm

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
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Ba 11/05/2010 10:54 pm

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.  
Tập tin đính kèm
Tìm ngày dac biêt.rar
(2.46 KiB) Đã tải 309 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Năm 29/07/2010 7:13 pm

  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
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Quay về “[VB] Chuỗi và Thời gian”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách