• 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

Moderators: tungcan5diop, QUANITGROBEST

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 32 times
Contact:

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

Postby clarkkent » Tue 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

Code: Select all

  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)

Code: Select all

  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...

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 32 times
Contact:

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

Postby clarkkent » Tue 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...

User avatar
anhtuyenbk
Guru
Guru
Posts: 1311
Joined: Thu 22/09/2005 4:12 pm
Location: 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)

Postby anhtuyenbk » Tue 15/09/2009 1:25 pm

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

Code: Select all

  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

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 32 times
Contact:

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

Postby clarkkent » Tue 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-}

Code: Select all

  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...

User avatar
hoangthu1974
Guru
Guru
Posts: 813
Joined: Thu 09/03/2006 9:30 am
Location: Hà Nội --> Tp. Hồ Chí Minh
Been thanked: 13 times
Contact:

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

Postby hoangthu1974 » Tue 15/09/2009 4:00 pm

Còn, bỏ dòng

Code: Select all

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

Thay bằng

Code: Select all

  1.        Return current.AddDays(day_move)

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


Return to “[.NET] Chuỗi và Thời gian”

Who is online

Users browsing this forum: No registered users and 0 guests