我有一个约会,我需要填写一个下拉列表,其中包含该日期和今天之间的月份/年份。例如,如果该日期是10/14/2010,则下拉列表应包含2010年10月,2010年11月,2010年12月,2011年1月。
我正在考虑这样做的方法是将该日期传递给一个函数,从今天开始向后循环步骤1个月,同时将每个月添加到集合中,直到我们到达该日期并最终返回字符串集合。然后,在页面加载时填充下拉控件。最后,使用一些带有页面方法的ajax来解析字符串并触发部分页面重新加载。
我只是想知道是否有一种简单的方法可以做到。
感谢。
答案 0 :(得分:0)
你可以做类似这样的事情,这几乎就是你所描述的,除非向前计算:
private string[] FillDropDownWithDates(DateTime dt)
{
DateTime dtnow = DateTime.Now;
List<string> values = new List<string>();
if ( (dt <= dtnow))
{
values.Add(String.Format("{0:y}", dt));
}
while ( (dt = dt.AddMonths(1)) <= dtnow || ( dt.Month == dtnow.Month && dt.Year == dtnow.Year) )
{
values.Add(String.Format("{0:y}", dt)); // "March, 2008" YearMonth
}
return values.ToArray();
}
答案 1 :(得分:0)
也许你可以试试这个:
static IEnumerable<DateTime> monthsBetween(DateTime startDate, DateTime endDate)
{
return Enumerable.Range(0, (endDate.Year - startDate.Year) * 12 + (endDate.Month - startDate.Month + 1))
.Select(m => new DateTime(startDate.Year, startDate.Month, 1).AddMonths(m));
}
这不会以您想要的确切格式提供结果,但是您会得到漂移。 :)
答案 2 :(得分:0)
public static List<string> GetMonths(DateTime StartDate)
{
List<string> MonthList = new List<string>();
DateTime ThisMonth = DateTime.Now.Date;
while (ThisMonth.Date > StartDate.Date)
{
MonthList.Add(ThisMonth.ToString("MMMM") + " " + ThisMonth.Year.ToString());
ThisMonth = ThisMonth.AddMonths(-1);
}
return MonthList;
}
答案 3 :(得分:0)
年份,
public static IEnumerable<int> Range (int start, int count)
{
int end = start + count;
for (int i = start; i < end; i++)
yield return i;
}
var startYear = 2000;
YearDropDownList.ItemsSource= Enumerable.Range(startYear, 2050 - startYear + 1);
月份, 具有.ToString(“MMMM”)格式的可数列表。
答案 4 :(得分:0)
这就是我获得12个月/年的方式。希望代码有帮助。
public IEnumerable<SelectListItem> Additional12Months {
get
{
return Enumerable.Range(12, 12).Select(i => new SelectListItem { Value = DateTime.Now.AddMonths(-(i)).ToShortDateString(), Text = DateTime.Now.AddMonths(-(i)).ToString("MMM-yyyy") }).ToList();
}
}