首页 > 解决方案 > 在C#中获取当月的第一个日期和当月的最后一个日期

问题描述

需要帮助如何获取当月一周的第一个日期和最后一个日期。

低于我到目前为止所做的工作,但仍然适用于某些情况,特别是在开始日期和结束日期是星期天的情况下:

    var givenDate = new DateTime(2018,4,1);
    var intervalToStart = givenDate.DayOfWeek - DayOfWeek.Monday;
    var startDate = givenDate.AddDays(-intervalToStart);

    DateTime endDate;
    int intervalToEnd = 0; 

    if (startDate.Month != givenDate.Month)
        startDate = new DateTime(givenDate.Year, givenDate.Month, 1);

    var dayOfWeekStartDate = startDate.DayOfWeek.ToString().ToLower();

    switch (dayOfWeekStartDate)
        {
            case "sunday": intervalToEnd = 0;
                break;
            case "monday": intervalToEnd = 6;
                break;
            case "tuesday": intervalToEnd = 5;
                break;
            case "wednesday": intervalToEnd = 4;
                break;
            case "thursday": intervalToEnd = 3;
                break;
            case "friday": intervalToEnd = 2;
                break;
            case "saturday": intervalToEnd = 1;
                break;
        }

    endDate = startDate.AddDays(intervalToEnd);


    Console.WriteLine(startDate);
    Console.WriteLine(endDate);

情况1:

案例二:

案例3:

案例4:

概念或答案受到高度赞赏。

先感谢您。

标签: c#datedatetime

解决方案


如果星期一将落入上个月,您想返回该月的第一天吗?

public static Tuple<DateTime, DateTime> GetFirstAndLastWeekDate(DateTime dt, DayOfWeek firstDayOfWeek = DayOfWeek.Monday)
{
    int diff = (7 + (dt.DayOfWeek - firstDayOfWeek)) % 7;
    DateTime firstDay = dt.AddDays(-1 * diff).Date;
    DateTime lastDay = firstDay.AddDays(6);
    if (dt.Month != firstDay.Month)
    {
        firstDay = new DateTime(dt.Year, dt.Month, 1);
    }

    return Tuple.Create(firstDay, lastDay);
}

推荐阅读