如何与日期时间一起创造月份和年份

问题描述:

我想创造的财产以后这样的:如何与日期时间一起创造月份和年份

月,2013
月,2013
2013年3月
日,2013
2013年1月
2012年12月
月,2012

我所写的是这样的:

var currentDate = DateTime.Now; 
var list = new List<ArchiveViewModel>(); 
for (var startDate = new DateTime(2013, 1, 1); startDate.Month <= currentDate.Month; startDate = startDate.AddMonths(1)) 
{ 
    list.Add(new ArchiveViewModel 
       { 
        Month = startDate.Month, 
        Year = startDate.Year, 
        FormattedDate = startDate.ToString("MMMM, yyyy") 
       }); 
} 

和ArchiveViewModel是这样的:

public class ArchiveViewModel 
{ 
    public int Month { get; set; } 
    public int Year { get; set; } 

    public string FormattedDate { get; set; } 
} 

但是,它会创建一个特定年份(2012年或2013年)的只有几个月:

January, 2013 
February, 2013 
March, 2013 
April, 2013 
May, 2013 

,如果我改变起始日期到(2012年, 1,1)它会创建这个:

January, 2012 
February, 2012 
March, 2012 
April, 2012 
May, 2012 

但我想要的是这样的:

November,2012 
December , 2012 
January, 2013 
February, 2013 
March, 2013 
April, 2013 
May, 2013 

简单的循环条件从

startDate.Month <= currentDate.Month 

更改到

startDate <= currentDate 

尝试

var currentDate = new DateTime (DateTime.Now.Year, DateTime.Now.Month, 1); 

for (var startDate = new DateTime(2012, 11, 1); startDate <= currentDate; startDate = startDate.AddMonths(1)) 

你的问题是停车状态中的for循环

startDate.Month <= currentDate.Month; 

currentDate是一个常数,在这种情况下currentDate.Month总是5.这使得相当于

startDate.Month <= 5; 

如果您尝试条件比5月晚(例如7月的开始日期)开始,它不会循环。

我会扩大停止条件以考虑年份。事情是这样的:

startDate.Month <= currentDate.Month || startDate.Year < currentDate.Year; 

通过这种方式,它可以循环过去的2012年5月(自今年仍然会更低),但将停止在2013年5