获取两个日期之间的某个工作日的日期
本文关键字:日期 之间 工作日 两个 获取 | 更新日期: 2023-09-27 18:37:25
我收到一个开始和结束DateTime
。
由此,我想创建这两个日期之间的所有日期的List<DateTime>
,但仅在指定的工作日(例如星期一)创建。
您可以
生成日期列表,如创建数组或列出两个日期之间的所有日期中所述:
public List<DateTime> GetDatesBetween(DateTime start, DateTime end)
{
var dates = Enumerable.Range(0, 1 + end.Subtract(start).Days)
.Select(offset => start.AddDays(offset))
.ToList();
return dates;
}
现在,通过仅选择日期Where()
DayOfWeek 属性是请求的工作日之一,筛选此列表以仅包含您感兴趣的工作日同样简单:
public List<DateTime> GetDatesBetween(DateTime start, DateTime end, params DayOfWeek[] weekdays)
{
bool allDays = weekdays == null || !weekdays.Any();
var dates = Enumerable.Range(0, 1 + end.Subtract(start).Days)
.Select(offset => start.AddDays(offset))
.Where(d => allDays || weekdays.Contains(d.DayOfWeek))
.ToList();
return dates;
}
波纹管函数返回一个List<DateTime>
,其中包含从 startDate
到 endDate
给出dayOfWeek
的所有日期:
public static List<DateTime> Get_DayofWeek_DatesBetween(DateTime startDate, DateTime endDate, DayOfWeek dayOfWeek)
{
List<DateTime> list = new List<DateTime>();
// Total dates in given range. "+ 1" include endDate
double totalDates = (endDate.Date - startDate.Date).TotalDays + 1;
// Find first "dayOfWeek" date from startDate
int i = dayOfWeek - startDate.DayOfWeek;
if (i < 0) i += 7;
// Add all "dayOfWeek" dates in given range
for (int j = i; j < totalDates; j += 7) list.Add(startDate.AddDays(j));
return list;
}