Dường như ngôn ngữ cung cấp phương pháp ngày/ngày cho một ngày nhất định. Nếu có ai quan tâm, bạn có thể đọc về Zeller's congruence.
Tôi không nghĩ đó là điều họ muốn bạn làm nhưng bạn có thể tìm thấy ngày trong tuần của ngày đầu tiên của tháng đó. Bây giờ tôi nghĩ về nó, bạn có thể tìm thấy ngày trong tuần cho ngày nhất định là N
và nhận được điều đó modulo 7.
Ồ chờ đợi, đó là lần thứ N xảy ra trong một ngày trong tuần (như Chủ Nhật) hay giống như Nth ngày trong tuần của tháng! Được rồi, tôi thấy các ví dụ.
Có lẽ nó sẽ làm cho một sự khác biệt nếu bạn có thể xây dựng một ngày như ngày 1 tháng ..
Cho rằng đó là sự xuất hiện thứ N của một ngày trong tuần, và rằng bạn không thể fiddle với datatype datetime bất cứ điều gì, và rằng bạn có quyền truy cập vào cả một ngày nhận được trong tuần và nhận được ngày của tháng chức năng. Chủ nhật sẽ là số không?
1) Trước tiên, ngày trong tuần sẽ phải khớp với ngày trong tuần nhất định.
2) N phải có ít nhất 1 và tối đa 4.
3) Ngày trong tháng sẽ nằm trong khoảng từ n * 7 * dayOfWeek + 1 và n * 7 * dayOfWeek + 6 cho cùng n.
- Hãy để tôi suy nghĩ về điều đó. Nếu chủ nhật là ngày đầu tiên .. 0 * 7 * 0 + 1 = 1 và thứ bảy thứ 6 sẽ là 0 * 7 * 0 + 6.
Suy nghĩ 1 và 3 ở trên là đủ vì chức năng nhận ngày tháng không được vi phạm 2.
(* first try, this code sucks *)
function isNthGivenDayInMonth(date : dateTime;
dow : dayOfWeek;
N : integer) : boolean;
var B, A : integer (* on or before and after day of month *)
var Day : integer (* day of month *)
begin
B := (N-1)*7 + 1; A := (N-1)*7 + 6;
D := getDayOfMonth(date);
if (dow <> getDayOfWeek(date)
then return(false)
else return((B <= Day) and (A >= Day));
end; (* function *)
Hy vọng không có lỗi trong đó!
[chỉnh sửa: Thứ bảy sẽ là ngày thứ 7 và phần trên phía trên (N-1)*7 + 7
.]
Giải pháp của bạn có vẻ như sẽ khớp với 2 tuần khác nhau? Có vẻ như nó sẽ luôn trả về 0 cho Chủ nhật? Nên đã làm giả mã trong C# .. ngắn mạch & & là như tôi nếu .. hey không nên chủ nhật trận đấu đầu tiên cho N = 1 trong tháng bắt đầu vào chủ nhật?
d/ 7 == n
Điều đó sẽ dẫn đến (either 0 or 1)/7 == 1
, điều đó không thể đúng! ||
của bạn cũng bắt được số (n-1)
, Robert có điều đó. Đi với câu trả lời của Robert Wagner! Nó chỉ có 2 dòng, ngắn là tốt! Có (Day-1) mod 7
[chỉnh sửa: (Day-1) div 7
] loại bỏ các biến không cần thiết của tôi và 2 dòng thiết lập.
Để ghi lại, điều này cần được kiểm tra cho các trường hợp ranh giới và cứ như thế nào nếu ngày 31 tháng 8 là Chủ Nhật hoặc Thứ Bảy.
[chỉnh sửa: Có nên đã kiểm tra trường hợp cuối tuần quá. ! Xin lỗi]
mà kinda không đối diện với những gì tôi muốn – Kevin