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

Các điều hành viên: tungcan5diop, QUANITGROBEST

Đăng trả lời
Hình đại diện của thành viên
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: Thứ 4 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 32 times
Tiếp xúc:

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

Gửi bài by clarkkent »

Thủ thuật: Tìm ngày theo điều kiện
Tác giả: Nguyễn Trung Tín
Mô tả: Tìm ngày theo điều kiện
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 tất cả

    Public Enum tNgay 'cái này viết lại cho dễ coi , chứ mặc định CN là 0, thứ 2 là 1,...        ChuNhat = 1        Thu2 = 2        Thu3 = 3        Thu4 = 4        Thu5 = 5        Thu6 = 6        Thu7 = 7    End Enum     Function tFindDay(ByVal iNgay As tNgay, ByVal iThuTu As Integer, ByVal iThang As Integer, ByVal iNam As Integer) As Date        'iNgay: thứ cần tìm, ví dụ: Chủ nhật = 1, Thứ 2 = 2,...        'iThuTu: ngày thứ mấy, ví dụ Ngày CN thứ 3 thì iThuTu = 3        'iThang: tháng cần tìm        'inam: năm cần tìm        Dim i, iDem As Integer        For i = 1 To DateTime.DaysInMonth(iNam, iThang)            Dim nNgayDangChon As DateTime = New DateTime(iNam, iThang, i)            If nNgayDangChon.DayOfWeek = iNgay - 1 Then                iDem += 1                If iDem = iThuTu Then Return nNgayDangChon            End If        Next        Return Nothing    End Function
Cách sử dụng: ví dụ tìm Ngày của mẹ nhé (ngày Chủ Nhật thứ 2 của tháng 5)

Mã: Chọn tất cả

        'tìm ngày của Mẹ ((Chủ Nhật thứ 2 của tháng 5)        MsgBox(FindDay(tNgay.ChuNhat, 2, 5, 2009).ToString)
Kết quả ra ngày: 10/05/2009 :D
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...
Hình đại diện của thành viên
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: Thứ 4 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 32 times
Tiếp xúc:

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ài by clarkkent »

mới viết gọn lại, hình như còn gọn được nữa, để mò xem :D
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...
Hình đại diện của thành viên
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: Thứ 5 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 times

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ài by anhtuyenbk »

Nè, code C# nhé. >:) >:)

Mã: Chọn tất cả

public static DateTime FindDay(DayOfWeek dayofweek, int ordernumber, int month, int year)        {            DateTime current = new DateTime(year, month, 1);            int day_move = dayofweek - current.DayOfWeek;            if( day_move < 0 )                day_move += 7;            day_move += (ordernumber - 1) * 7;            DateTime result = current.AddDays(day_move);            return result;        }
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang
Hình đại diện của thành viên
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: Thứ 4 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 32 times
Tiếp xúc:

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ài by clarkkent »

cách trên = vb.net, ai còn cách ngắn hơn nữa không 8-}

Mã: Chọn tất cả

    Function FindDay(ByVal dayofweek As DayOfWeek, ByVal ordernumber As Integer, ByVal month As Integer, ByVal year As Integer) As DateTime        Dim current As New DateTime(year, month, 1)        Dim day_move As Integer = dayofweek - current.DayOfWeek        If day_move < 0 Then            day_move += 7        End If        day_move += (ordernumber - 1) * 7        Dim result As DateTime = current.AddDays(day_move)        Return result    End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...
Hình đại diện của thành viên
hoangthu1974
Guru
Guru
Bài viết: 813
Ngày tham gia: Thứ 5 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Tiếp xúc:

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ài by hoangthu1974 »

Còn, bỏ dòng

Mã: Chọn tất cả

        Dim result As DateTime = current.AddDays(day_move)        Return result
Thay bằng

Mã: Chọn tất cả

        Return current.AddDays(day_move)
Bớt được 1 dòng. >:) >:) >:)
Đăng trả lời

Quay về