检查这个星期一是否是一个月内的最后一个星期一

本文关键字:星期一 一个 最后一个 是否是 检查 | 更新日期: 2023-09-27 18:25:41

我使用来自另一个问题的代码:

private bool NthDayOfMonth(DateTime date, DayOfWeek dow, int n){
  int d = date.Day;
  return date.DayOfWeek == dow && (d-1)/7 == (n-1);
}

它运行良好。但它不会检查最后一天(对我来说,这是n=5的时候)。如何修改
谢谢

检查这个星期一是否是一个月内的最后一个星期一

下面的方法检查给定的日期是一个月中星期的最后一个日期。

private bool IsLastOfMonth(DateTime date)
{
    var oneWeekAfter = date.AddDays(7);
    return oneWeekAfter.Month != date.Month;
}

所以有了新的方法,它只检查周一的

private bool IsLastMonday(DateTime date)
{
    if (date.DayOfWeek != DayOfWeek.Monday) 
        return false; // it is not monday
    // the next monday is...
    var oneWeekAfter = date.AddDays(7);
    // and is it in same month?, if it is, that means its not last monday
    return oneWeekAfter.Month != date.Month;
}

让我们以 3月30日为例

d = 30,  
(date.DayOfWeek == DayOfWeek.Friday) == true, 
(30-1)=29, 29/7 = 4
4 == (5-1)

所以它工作

要只检查DayOfWeek是否最后一次处于封存状态,您可以使用

return date.AddDays(7).Month != date.Month;