我想知道在给定开始和结束日期时,如何检索两个日期之间的月份和年份.
例如: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
Jod*_*ell 46
开始了
public static IEnumerable<Tuple<string, int>> 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);
}
}
Run Code Online (Sandbox Code Playgroud)
显然你这样称呼它
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);
Run Code Online (Sandbox Code Playgroud)
结果应该是这样的
{
{ "January", 2011 },
{ "February", 2011 },
{ "March", 2011 },
{ "April", 2011 },
{ "May", 2011 },
{ "June", 2011 },
{ "July", 2011 },
{ "August", 2011 },
{ "September", 2011 },
{ "October", 2011 },
{ "November", 2011 },
}
Run Code Online (Sandbox Code Playgroud)
月份名称取决于您的文化,我认为,这正是您所要求的,对吧?
V4V*_*tta 13
您可以从while循环开始,其中开始日期小于或等于结束日期
在其中从开始日期拉出相关的月份和年份部分并存储它们(可能您有一个具体的类或a),然后使用一个月将开始日期增加1个月 AddMonths(1)
//something on these lines
while(startdate <= enddate)
{
// pull out month and year
startdate = startdate.AddMonths(1);
}
Run Code Online (Sandbox Code Playgroud)
使用这个公式:
((date1.Year - date2.Year) * 12) + date1.Month - date2.Month
Run Code Online (Sandbox Code Playgroud)
你得到月数。
以适当的方式使用它,您将破解它。
欢迎来到 Stackoverflow ,这里是您的职责所在,并为此提供思路供兄弟会在您遇到问题时执行。
小智 5
您可以使用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));
Run Code Online (Sandbox Code Playgroud)