在两个日期之间创建月份数组

And*_*ans 8 c# datetime range

我有以下代码片段用于获取两个日期之间的各个日期:

DateTime[] output = Enumerable.Range(0, 1 + endDate.Subtract(startDate).Days)
    .Select(offset => startDate.AddDays(offset))
    .ToArray(); 
Run Code Online (Sandbox Code Playgroud)

但是,以下部分

endDate.Subtract(startDate).Days
Run Code Online (Sandbox Code Playgroud)

没有.Months返回日期范围内的月份.

例如,如果我提供2010年1月1日和2010年6月1日,我希望返回2010年1月1日,2010年2月1日,2010年3月1日,2010年4月1日,5/1/2010年和2010年6月1日.

有任何想法吗?

Las*_*olt 29

试试这个:

static IEnumerable<DateTime> monthsBetween(DateTime d0, DateTime d1)
{
    return Enumerable.Range(0, (d1.Year - d0.Year) * 12 + (d1.Month - d0.Month + 1))
                     .Select(m => new DateTime(d0.Year, d0.Month, 1).AddMonths(m));
}
Run Code Online (Sandbox Code Playgroud)

这包括起始月份和结束月份.这会查找有多少个月,然后DateTime根据d0年份和月份创建新的月份.这意味着几个月就好了yyyy-MM-01.如果你想让它包括时间和日期d0,你可以替换new DateTime(d0.Year, d0.Month, 1).AddMonths(m)d0.AddMonths(m).

我发现你需要一个数组,在这种情况下你只需要使用monthsBetween(..., ...).ToArray()或放入.ToArray()方法.