如何使用Datetime创建月和年

本文关键字:创建 何使用 Datetime | 更新日期: 2023-09-27 18:12:47

我想创建这样的内容:

2013年5月


2013年4月,
2013年3月,
2013年2月,
2013年1月,
2012年12月
2012年11月

我写的是:

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
如果我将startDate改为(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

如何使用Datetime创建月和年

只需从

更改for循环条件
startDate.Month <= currentDate.Month

startDate <= currentDate

try

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月停止。