[英]Get first date of week and last date in current month in 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:
給定日期:2018年5月5日(星期六)
星期的第一天:2018年5月1日(星期二)
一周的最后日期:208年5月6日(星期日)
情況2:
給定日期:2018年5月9日(星期三)
星期的第一天:2018年5月7日(星期一)
一周的最后日期:2018年5月13日(星期日)
情況3:
給定日期:2018年4月1日(星期日)
星期的第一天:2018年4月1日(星期日)
一周的最后日期:2018年4月1日(星期日)
情況4:
給定日期:2018年6月2日(星期六)
星期的第一天:2018年6月1日(星期五)
一周的最后日期:2018年6月3日(星期日)
概念或答案受到高度贊賞。
先感謝您。
要返回該月的第一天,如果星期一會落入前一個月?
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);
}
和代碼將是這樣的
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.