• 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

Điều hành viên: tungcan5diop, QUANITGROBEST

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ệ:

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 11:27 am

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 hết

  1.    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,...
  2.         ChuNhat = 1
  3.         Thu2 = 2
  4.         Thu3 = 3
  5.         Thu4 = 4
  6.         Thu5 = 5
  7.         Thu6 = 6
  8.         Thu7 = 7
  9.     End Enum
  10.  
  11.     Function tFindDay(ByVal iNgay As tNgay, ByVal iThuTu As Integer, ByVal iThang As Integer, ByVal iNam As Integer) As Date
  12.         'iNgay: thứ cần tìm, ví dụ: Chủ nhật = 1, Thứ 2 = 2,...
  13.         'iThuTu: ngày thứ mấy, ví dụ Ngày CN thứ 3 thì iThuTu = 3
  14.         'iThang: tháng cần tìm
  15.         'inam: năm cần tìm
  16.         Dim i, iDem As Integer
  17.         For i = 1 To DateTime.DaysInMonth(iNam, iThang)
  18.             Dim nNgayDangChon As DateTime = New DateTime(iNam, iThang, i)
  19.             If nNgayDangChon.DayOfWeek = iNgay - 1 Then
  20.                 iDem += 1
  21.                 If iDem = iThuTu Then Return nNgayDangChon
  22.             End If
  23.         Next
  24.         Return Nothing
  25.     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 hết

  1.        'tìm ngày của Mẹ ((Chủ Nhật thứ 2 của tháng 5)
  2.         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 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:09 pm

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 người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 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 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 anhtuyenbk » T.Ba 15/09/2009 1:25 pm

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

Mã: Chọn hết

  1. public static DateTime FindDay(DayOfWeek dayofweek, int ordernumber, int month, int year)
  2.         {
  3.             DateTime current = new DateTime(year, month, 1);
  4.             int day_move = dayofweek - current.DayOfWeek;
  5.             if( day_move < 0 )
  6.                 day_move += 7;
  7.             day_move += (ordernumber - 1) * 7;
  8.             DateTime result = current.AddDays(day_move);
  9.             return result;
  10.         }
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

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:46 pm

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

Mã: Chọn hết

  1.    Function FindDay(ByVal dayofweek As DayOfWeek, ByVal ordernumber As Integer, ByVal month As Integer, ByVal year As Integer) As DateTime
  2.         Dim current As New DateTime(year, month, 1)
  3.         Dim day_move As Integer = dayofweek - current.DayOfWeek
  4.         If day_move < 0 Then
  5.             day_move += 7
  6.         End If
  7.         day_move += (ordernumber - 1) * 7
  8.         Dim result As DateTime = current.AddDays(day_move)
  9.         Return result
  10.     End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

Hình đại diện của người dùng
hoangthu1974
Guru
Guru
Bài viết: 812
Ngày tham gia: T.Năm 09/03/2006 9:30 am
Đến từ: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 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 hoangthu1974 » T.Ba 15/09/2009 4:00 pm

Còn, bỏ dòng

Mã: Chọn hết

  1.        Dim result As DateTime = current.AddDays(day_move)
  2.         Return result

Thay bằng

Mã: Chọn hết

  1.        Return current.AddDays(day_move)

Bớt được 1 dòng. >:) >:) >:)


Quay về “[.NET] 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