列出两个日期之间的月份

我想知道在给定开始和结束日期时,如何检索两个日期之间的月份和年份。

例如: Start Date: '1/1/2011'(mm/dd/yyyy)End date :'11/30/2011' Start Date: '1/1/2011'(mm/dd/yyyy) End date :'11/30/2011' 。 要检索的月份和年份是January,2011; February,2011; March,2011; and so on till November,2011 January,2011; February,2011; March,2011; and so on till November,2011

开始了

  public static IEnumerable> MonthsBetween( DateTime startDate, DateTime endDate) { DateTime iterator; DateTime limit; if (endDate > startDate) { iterator = new DateTime(startDate.Year, startDate.Month, 1); limit = endDate; } else { iterator = new DateTime(endDate.Year, endDate.Month, 1); limit = startDate; } var dateTimeFormat = CultureInfo.CurrentCulture.DateTimeFormat; while (iterator <= limit) { yield return Tuple.Create( dateTimeFormat.GetMonthName(iterator.Month), iterator.Year); iterator = iterator.AddMonths(1); } } 

显然你这样称呼它

 var startDate = DateTime.ParseExact("01/01/2011", "MM/dd/yyyy"); var endDate = DateTime.ParseExact("11/30/2011", "MM/dd/yyyy"); var months = MonthsBetween(startDate, endDate); 

结果应该是这样的

 { { "January", 2011 }, { "February", 2011 }, { "March", 2011 }, { "April", 2011 }, { "May", 2011 }, { "June", 2011 }, { "July", 2011 }, { "August", 2011 }, { "September", 2011 }, { "October", 2011 }, { "November", 2011 }, } 

月份名称取决于您的文化,我认为,这正是您所要求的,对吧?

您可以从while循环开始,其中开始日期小于或等于结束日期

在其中从开始日期拉出相关的月份和年份部分并存储它们(可能你有一个具体的类或a),然后使用AddMonths(1)将开始日期增加1个月

 //something on these lines while(startdate <= enddate) { // pull out month and year startdate = startdate.AddMonths(1); } 

您可以使用Enumerable.Range函数获取两个日期之间的月份和年份,

 var start = new DateTime(2011, 1, 1); var end = new DateTime(2011, 11, 30); var diff = Enumerable.Range(0, 13).Select(a => start.AddMonths(a)) .TakeWhile(a => a <= end) .Select(a => String.Concat(a.ToString("MMMM") + ", " + a.Year)); 

使用此公式:

 ((date1.Year - date2.Year) * 12) + date1.Month - date2.Month 

你得到了几个月。

以适当的方式使用它,你会破解它。

欢迎来到Stackoverflow,在这里努力工作是你的一部分,为你的思想提供思路是兄弟会在你遇到问题时做的事情。