2017-10-01 4 views
1

私は以下のコードを2つの日付の間の毎月の最終日を表示するようにしました しかし、私の問題は月から最後の日を取得していません。例えば2つの日付の間の月のリストasp.net

Date1: 31/10/2017 Date2: 31/3/2018

私の結果:

31-10-2017 
30-11-2017 
30-12-2017 
30-1-2017 
28-2-2018 
28-3-2018 

それは

31-10-2017 
30-11-2017 
31-12-2017 
31-1-2017 
28-2-2018 
31-3-2018 

コードのようになります。

Dim startDay As Date = StartDate.SelectedDate 
Dim endDay As Date = EndDate.SelectedDate 
Dim dayCtr As Date 
dayCtr = startDay 
Do While (dayCtr <= endDay) 
    ' MsgBox(dayCtr.Date.Day & "-" & dayCtr.Date.DayOfWeek.ToString()) 
     ListBox1.Items.Add(dayCtr.Date.Day & "-" & dayCtr.Date.Month.ToString() & "-" & dayCtr.Date.Year.ToString()) 
     dayCtr = dayCtr.AddMonths(1) 
Loop 

おかげ

答えて

1

AddMonth(1)は、日付の月の構成要素に1を追加します(そして、翌年に遡って行う必要がないので、残りはあなた次第です)。

Private Function GetLastDayOfMonth(currentDate As Date) As Date 
    Dim result As Date 
    'Jump one Month ahead 
    result = currentDate.AddMonths(1) 
    'Go to first day of that Month 
    result = New Date(result.Year, result.Month, 1) 
    'Go one day back 
    result = result.AddDays(-1) 
    Return result 

End Function 

そうのようなあなたのコード内でこの機能を使用します。

Dim startDay As Date = StartDate.SelectedDate 
Dim endDay As Date = EndDate.SelectedDate 
Dim dayCtr As Date 
dayCtr = startDay 
Do While (dayCtr <= endDay) 

    ' MsgBox(dayCtr.Date.Day & "-" & dayCtr.Date.DayOfWeek.ToString()) 
    Dim lastDay As Date = GetLastDayOfMonth(dayCtr) 
    ListBox1.Items.Add(lastDay.Date.Day & "-" & lastDay.Date.Month.ToString() & "-" & lastDay.Date.Year.ToString()) 
    dayCtr = dayCtr.AddMonths(1) 
Loop 

、あなたは問題ないはずです。 .NETは日付の処理に多くの手間を掛けますが、まだ少しの肘のグリースが必要です。

+0

それは私がDaysInMonth' 'について知っているし、それを言及している必要がありますが、私は思っ –

0

余分な操作をせずにDate.DaysInMonth法を用いて、リトル入札異なるアプローチに

Private Iterator Function GetLastDatesFrom(startDate As Date, 
              endDate As Date) As IEnumerable(Of Date) 
    Dim temp = startDate 
    Do While (temp <= endDate) 
     Dim lastDay = Date.DaysInMonth(temp.Year, temp.Month) 
     Yield New Date(temp.Year, temp.Month, lastDay) 

     temp = temp.AddMonths(1) 
    Loop 
End Function 

その後

Dim startDay As Date = StartDate.SelectedDate 
Dim endDay As Date = EndDate.SelectedDate 

Dim dates = GetLastDatesFromRange(startDay, endDay).ToList() 
ListBox1.Items.AddRange(dates) 
+0

細かいおかげで働いて素晴らしいです日数を加算したり減算したりする作業を表示するとよいでしょう。 :) – themightylc

関連する問題