从给定日期开始经过数月和数年的简单方法

我一直试图写这个循环,它只是变得越来越复杂。 基本上我想采取一个给定的日期并循环每个月,直到我达到当月。 因此,如果开始日期是11/1/2011,那么我想循环

11 / 2011,12 / 2011,1 / 2012,2 / 2012等

这是我开始的,但这不起作用。 一旦我遇到新的一年,我需要内部循环重新开始,而不是startdate.Month。 有没有更好的方法来循环数月和数年? 谢谢

for (var y = startdate.Year; y <= DateTime.Now.Year; y++) { for (var m = startdate.Month; m <= 12; m++) { //do something with m and y } } 

 Date target = new Date(2011, 4, 1); while (target < Date.Today) { // do something with target.Month and target.Year target = target.AddMonths(1); } 
 DateTime endDate = DateTime.Today; for (DateTime dt = startDate; dt <= endDate; dt = dt.AddMonths(1)) { Console.WriteLine("{0:M/yyyy}", dt); } 

但是如果你喜欢while循环,那么投票给Dan-o。 我做到了。 🙂

这将循环几个月,这个月的日子不会成为问题。

 var date = startDate; var endDate = DateTime.Now; while(date.Year < endDate.Year || (date.Year == endDate.Year && date.Month <= endDate.Month)) { Console.WriteLine($"{date.Month}/{date.Year}"); date = date.AddMonths(1); } 
 while (startDate <= DateTime.Now) { //here you will get every new month in year Console.WriteLine(startDate.Month); //Add Month startDate=startDate.AddMonths(1); } 

在给定日期之间生成一个月中第一天的范围(如IEnumerable`DateTime):

 from range in new[] { new { start = new DateTime(2017, 6, 23), end = new DateTime(2018, 09, 11) } } select ( from y in Enumerable.Range( range.start.Year, range.end.Year - range.start.Year + 1 ) let ms = y == range.start.Year ? range.start.Month : 1 let me = y == range.end.Year ? range.end.Month : 12 select from m in Enumerable.Range(ms, me - ms + 1) select new DateTime(y, m, 1) ).SelectMany(y => y) 

Sam的答案很好但最终不正确(如果你的开始日是20,你的结束日是10,那么它将不包括上个月)。 这是一个有效的版本:

  public void GetMonths(DateTime startTime, DateTime endTime) { var dateCounter = new DateTime(startTime.Year, startTime.Month, 1); var endDateTarget = new DateTime(endTime.Year, endTime.Month, 1); while (dateCounter <= endDateTarget) { Console.WriteLine($"The year and month is: {dateCounter.Year}, {dateCounter.Month}"); dateCounter = dateCounter.AddMonths(1); } }