1

開始日と終了日を選択するために使用される2つのテキストボックスがあります。外側のループが1年間で、内側のループが毎月実行されるループが必要です。

問題は以下のコードにあります。2011年11月1日と2012年6月30日を選択した場合、月のループは11か月に1回実行されます。その後、ループは終了します。

以下のコードを使用して、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;
  }
}
4

6 に答える 6

6

このようなものは機能しますか?

for (DateTime date = Calendar1.SelectedDate; date < Calendar2.SelectedDate; date = date.AddMonths(1))
{
 //code
}
于 2012-06-13T21:59:41.267 に答える
4

私があなたを正しく理解していれば、2つの日付の間で毎月繰り返したいと思っています。もしそうなら、これはうまくいくはずです:

var dt2 = Calendar2.SelectedDate.Year;
var current = Calendar1.SelectedDate;
while (current < dt2)
{
  current = current.AddMonths(1);
  //do your work for each month here
}
于 2012-06-13T22:07:05.490 に答える
1

内側のループの開始番号と終了番号は条件付きでなければなりません。

開始年にいる場合、開始月は選択した月にする必要があります。それ以外の場合は 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++)
    {

    }    
}
于 2012-06-13T21:56:27.263 に答える
0
//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)..
于 2012-09-26T09:41:45.660 に答える
0

開始年については、適切な月から内部ループを開始し、適切な月まで実行する必要がある終了年を除いて、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;
    }
}
于 2012-06-13T21:58:58.083 に答える