简体   繁体   English

在C#中获取星期的第一个日期和当前月份的最后一个日期

[英]Get first date of week and last date in current month in C#

Need help how to get first date and last date of a week in current month. 需要帮助如何获取当月的一周的第一个日期和最后一个日期。

Below what I have done so far, but still fall for certain case especially where the start date and end date is sunday: 低于我到目前为止所做的事情,但是在某些情况下仍然会下降,尤其是在开始日期和结束日期是星期日的情况下:

    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);

Case 1: 情况1:

  • Given date: 05 May 2018 (saturday) 给定日期:2018年5月5日(星期六)

  • First date of week: 01 May 2018 (tuesday) 星期的第一天:2018年5月1日(星期二)

  • Last date of week: 06 May 208 (sunday) 一周的最后日期:208年5月6日(星期日)

Case 2: 情况2:

  • Given date: 09 May 2018 (wednesday) 给定日期:2018年5月9日(星期三)

  • First date of week: 07 May 2018 (monday) 星期的第一天:2018年5月7日(星期一)

  • Last date of week: 13 May 2018 (sunday) 一周的最后日期:2018年5月13日(星期日)

Case 3: 情况3:

  • Given date: 01 Apr 2018 (sunday) 给定日期:2018年4月1日(星期日)

  • First date of week: 01 Apr 2018 (sunday) 星期的第一天:2018年4月1日(星期日)

  • Last date of week: 01 Apr 2018 (sunday) 一周的最后日期:2018年4月1日(星期日)

case 4: 情况4:

  • Given date: 02 June 2018 (saturday) 给定日期:2018年6月2日(星期六)

  • First date of week: 01 June 2018 (friday) 星期的第一天:2018年6月1日(星期五)

  • Last date of week: 03 June 2018 (sunday) 一周的最后日期:2018年6月3日(星期日)

Concept or answer is highly appreciated. 概念或答案受到高度赞赏。

Thank you in advance. 先感谢您。

You want to return the first day of the month if the monday would fall into the previous month? 要返回该月的第一天,如果星期一会落入前一个月?

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);
}

Use DateTime.DayOfWeek 使用DateTime.DayOfWeek

and the code would be like this 和代码将是这样的

var givenDate = new DateTime(2018, 4, 1);
int addMax = DateTime.DaysInMonth(givenDate.Year, givenDate.Month) - givenDate.Day;
int add = Math.Min(addMax, ((DayOfWeek.Saturday - givenDate.DayOfWeek) + 1) % 7);

int subMax = givenDate.Day - 1;
int sub = Math.Min(subMax, (givenDate.DayOfWeek - DayOfWeek.Monday + 7) % 7);

var firstDate = givenDate.AddDays(-sub);
var lastDate = givenDate.AddDays(add);
Console.Write("Give: {0}({1})\nFirst: {2}({3})\nLast: {4}({5})", 
    givenDate, givenDate.DayOfWeek, 
    firstDate, firstDate.DayOfWeek, 
    lastDate, lastDate.DayOfWeek);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM