0

誰でも私のためにこれに光を当てることができますか、おそらく解決策を提案してください。

イベントのスケジュールに使用するカスタム カレンダーを作成しています。

コンストラクターで、2 つの日付 ( startDateendDate )を渡します。

フォームには FlowLayoutPanel があり、月の UserControls が取り込まれます。

私が抱えている問題はDateDiff(DateInterval.Month, startDate, endDate)、次の日付でa を実行すると、 startDate = 22/11/2012, endDate = 28/02/2013の結果が3になることです。

しかし、実際には、カレンダーでは、11 月、12 月、1 月、2 月の 4 か月を表示する必要があります。

ただし、 startDate = 12/11/2012、endDate = 01/03/2012の場合、ロジックは正しく機能します。

4

2 に答える 2

2

DateDiffの MSDN ドキュメントから

Interval が DateInterval.Year に設定されている場合、戻り値は Date1 と Date2 の年の部分だけから計算されます。同様に、 DateInterval.Month の戻り値は引数の年と月の部分のみから計算され、DateInterval.Quarter の戻り値は 2 つの日付を含む四半期から計算されます。

たとえば、12 月 31 日と翌年の 1 月 1 日を比較する場合、DateDiff は、DateInterval.Year、DateInterval.Quarter、または DateInterval.Month に対して 1 を返しますが、多くても 1 日しか経過していません。

これは、計算が残りの「日」を考慮していないことを意味します。

おそらく、関連する月を見つけるために DateDiff を使用しないカスタム カレンダーを作成する必要があります。
代わりに、次のような疑似コードを使用して作業する必要があります。

 Dim curMonth = startDate.Month
 Dim curYear = startDate.Year
 while curMonth <= endDate.Month andalso curYear <= endDate.Year
     AddCalendar(curMonth, curYear)
     curMonth = curMonth + 1
     if curMonth > 12 then 
         curMonth = 1
         curYear = curYear + 1
     end if
 end while
于 2012-11-27T11:17:13.740 に答える
0

私の理解が正しければ、日付間の実際の差が 3 か月未満であっても、4 か月を表示する必要があります。1つの解決策は次のようなものです:

Dim startDate = #11/22/2012# 'Nov 22nd
Dim endDate = #2/2/2013# 'Feb 2nd

Dim startMonth = new DateTime (startDate.Year, startDate.Month, 1)
Dim endMonth = new DateTime (endDate.Year, endDate.Month, 1).AddMonths (1)
Dim diff = DateDiff (DateInterval.Month, startMonth, endMonth)
于 2012-11-27T11:19:30.420 に答える