在每个月和每天的日期范围内循环
本文关键字:日期 范围内 循环 每天 | 更新日期: 2023-09-27 18:37:10
我有两个文本框,用于选择"开始"和"结束日期"。我需要有一个循环,其中外部循环将运行一年,内部循环将运行每个月。
问题出在下面的代码上,如果我选择 11/01/2011 和 06/30/2012,我的月份循环在第 11 个月运行一次。之后,循环退出。任何帮助,不胜感激。
我正在使用下面的代码查看 SharePoint 日历列表(使用 CAML 查询)并获取连续 3、5 天某个房间可用的次数,不包括周末。想法是使用 CAML 查询来获取每个月的空闲天数,并继续重复直到最后一个选定的月份。
int year = 0, month = 0;
for (year = Calendar1.SelectedDate.Year; year <= Calendar2.SelectedDate.Year; year++)
{
int i = year;
for (month = Calendar1.SelectedDate.Month; month <= Calendar2.SelectedDate.Month; month++)
{
int j = month;
}
}
这样
的东西会起作用吗?
for (DateTime date = Calendar1.SelectedDate; date < Calendar2.SelectedDate; date = date.AddMonths(1))
{
//code
}
如果我理解正确,您希望在 2 个日期之间循环访问每个月。如果是这样,这应该有效:
var dt2 = Calendar2.SelectedDate.Year;
var current = Calendar1.SelectedDate;
while (current < dt2)
{
current = current.AddMonths(1);
//do your work for each month here
}
内部循环的起始和结束编号应该是有条件的。
如果您处于开始年份,则开始月份应该是所选月份;否则应为 1。
如果你在结束年份,那么结束月份应该是选定的月份;否则应该是12。
例:
var startYear = Calendar1.SelectedDate.Year;
var endYear = Calender2.SelectedDate.Year;
var startMonth = Calender1.SelectedDate.Month;
var endMonth = Calender2.SelectedDate.Month;
for (var year = startYear; year <= endYear; year++)
{
var sm = year == startYear ? startMonth : 1;
var em = year == endYear ? endMonth : 12;
for (var month = sm; month <= em; month++)
{
}
}
对于开始年份,您需要从适当的月份开始内部循环,并运行所有 12 个月,除了结束年份,您应该运行到适当的月份。 这样的事情应该有效:
int year = 0, month = 0;
for (year = Calendar1.SelectedDate.Year; year <= Calendar2.SelectedDate.Year; year++)
{
int i = year;
for (month = (i==Calendar1.SelectedDate.Year ? Calendar1.SelectedDate.Month : 1); month <= (i==Calendar2.SelectedDate.Year ? Calendar2.SelectedDate.Month : 12); month++)
{
int j = month;
}
}
//Function return First day in Month For Date --example : 01-09-2012
public static DateTime FirstDayOfMonthFromDateTime(DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month, 1);
}
//code used to loop throw a Date range for each month
DateTime FirstDayInMonth = FirstDayOfMonthFromDateTime(Date);
DateTime TempDay = FirstDayInMonth;
int days = DateTime.DaysInMonth(FirstDayInMonth.Year, FirstDayInMonth.Month);
for (int i = 0; i < days; i++)
{
System.Out.Println(TempDay.toString());
TempDay.AddDays(1);
}
//then used code for each month in year (simple loop from 1-12)..
private static void Main(string[] args)
{
Console.WriteLine(DateTime.DaysInMonth(2020, 1));
var start = new DateTime(1900, 1, 1);
var end = new DateTime(2000, 12, 31);
end = new DateTime(end.Year, end.Month, DateTime.DaysInMonth(end.Year, end.Month));
var diff = Enumerable.Range(0, Int32.MaxValue)
.Select(e => start.AddMonths(e))
.TakeWhile(e => e <= end)
.Select(e => e);
foreach (var item in diff)
{
Console.WriteLine("Start Date - " + item.ToString("dd-MM-yyyy"));
Console.WriteLine("End Date - " + item.AddDays(DateTime.DaysInMonth(item.Year, item.Month) - 1).ToString("dd-MM-yyyy"));
}
}