根据开始日期,结束日期,计算出日历上有几周的方法
public static int CalculationWeek(DateTime periodStart, DateTime periodEnd)
{
const DayOfWeek FIRST_DAY_OF_WEEK = DayOfWeek.Monday;
const DayOfWeek LAST_DAY_OF_WEEK = DayOfWeek.Sunday;
const int DAYS_IN_WEEK = 7;
DateTime firstDayOfWeekBeforeStartDate;
int daysBetweenStartDateAndPreviousFirstDayOfWeek = (int)periodStart.DayOfWeek - (int)FIRST_DAY_OF_WEEK;
if (daysBetweenStartDateAndPreviousFirstDayOfWeek >= 0)
{
firstDayOfWeekBeforeStartDate = periodStart.AddDays(-daysBetweenStartDateAndPreviousFirstDayOfWeek);
}
else
{
firstDayOfWeekBeforeStartDate = periodStart.AddDays(-(daysBetweenStartDateAndPreviousFirstDayOfWeek + DAYS_IN_WEEK));
}
DateTime lastDayOfWeekAfterEndDate;
int daysBetweenEndDateAndFollowingLastDayOfWeek = (int)LAST_DAY_OF_WEEK - (int)periodEnd.DayOfWeek;
if (daysBetweenEndDateAndFollowingLastDayOfWeek >= 0)
{
lastDayOfWeekAfterEndDate = periodEnd.AddDays(daysBetweenEndDateAndFollowingLastDayOfWeek);
}
else
{
lastDayOfWeekAfterEndDate = periodEnd.AddDays(daysBetweenEndDateAndFollowingLastDayOfWeek + DAYS_IN_WEEK);
}
int calendarWeeks = 1 + (int)((lastDayOfWeekAfterEndDate - firstDayOfWeekBeforeStartDate).TotalDays / DAYS_IN_WEEK);
return calendarWeeks;
}
循环这几周,计算出每周的开始日期结束日期
DateTime periodStart = DateTime.Parse("2021-03-24");
DateTime periodEnd = DateTime.Parse("2021-03-29");
string weekBegin = string.Empty;
string weekEnd = string.Empty;
int calculationWeekTemp = CalculationWeek(periodStart, periodEnd);
for (int i = 1; i <= calculationWeekTemp; i++)
{
if (i == 1 && i == calculationWeekTemp)//只有一周的情况
{
weekBegin = periodStart.ToString();
weekEnd = periodEnd.ToString();
LogHelper.WriteInfoLog(string.Format("i={0} begin={1} end={2}", i, weekBegin, weekEnd));
}
else if (i == 1 && i != calculationWeekTemp)//大于1周的情况
{
weekBegin = periodStart.ToString();
DateTime dtDate = DateTime.Parse(weekBegin);
int weekEndNum = 0;
if (dtDate.DayOfWeek == DayOfWeek.Monday)
{
weekEndNum = 6;
}
if (dtDate.DayOfWeek == DayOfWeek.Tuesday)
{
weekEndNum = 5;
}
if (dtDate.DayOfWeek == DayOfWeek.Wednesday)
{
weekEndNum = 4;
}
if (dtDate.DayOfWeek == DayOfWeek.Thursday)
{
weekEndNum = 3;
}
if (dtDate.DayOfWeek == DayOfWeek.Friday)
{
weekEndNum = 2;
}
if (dtDate.DayOfWeek == DayOfWeek.Saturday)
{
weekEndNum = 1;
}
if (dtDate.DayOfWeek == DayOfWeek.Sunday)
{
weekEnd= periodStart.ToString("yyyy-MM-dd");
}
else
{
weekEnd = periodStart.AddDays(weekEndNum).ToString("yyyy-MM-dd");
}
LogHelper.WriteInfoLog(string.Format("i={0} begin={1} end={2}", i, weekBegin, weekEnd));
}
else if (i == calculationWeekTemp)//处理最后一周的情况
{
weekBegin = weekEnd.ToString();
weekEnd = periodEnd.ToString();
LogHelper.WriteInfoLog(string.Format("i={0} begin={1} end={2}", i, weekBegin, weekEnd));
}
else//处理中间的周情况
{
weekBegin = weekEnd.ToString();
weekEnd = DateTime.Parse(weekBegin).AddDays(7).ToString("yyyy-MM-dd");
LogHelper.WriteInfoLog(string.Format("i={0} begin={1} end={2}", i, weekBegin, weekEnd));
}
}