2013-10-04 1 views
4

모든 달을 주어진 날짜 사이에 MM/YYYY 형식으로 가져오고 싶습니다. 이 같은MM/YYYY 형식의 모든 월간을 받으십시오.

뭔가 :

Start date: 08/1/2012 
End date: 03/1/2013 

결과 :

09/2012 
10/2012 
11/2012 
12/2012 
01/2013 
02/2013 
03/2013 

이것은 내가 가지고있는 코드입니다하지만 내가 원하는대로 작동하지 않습니다.

for (int i = StartDate.Year; i <= EndDate.Year; i++) 
{ 
    for (int j = StartDate.Month+1; j <= 12 ; j++) 
    { 
    Console.WriteLine(j.ToString("00") + "/" + i.ToString())); 
    } 
} 

도움을 주셔서 감사합니다. 당신과 같이 호출 할 수있는

public static IEnumerable<DateTime> MonthsBetween(int startMonth, int startYear, int endMonth, int endYear) 
{ 
    for 
    (
     DateTime date = new DateTime(startYear, startMonth, 01).AddMonths(1); 
     date <= new DateTime(endYear, endMonth, 01); 
     date = date.AddMonths(1) 
    ) 
    { 
     yield return date; 
    } 
} 

: 당신이 그렇게 같은 날짜에 대해 별도의 열거를 작성하는 경우이 읽기 쉽고 강력한 것

+0

같네 : http://stackoverflow.com/questions/11930565/list-the-months-between-two-dates 아래 – EagleBeak

+0

어떤 대답한다 프로 올바른 결과를 얻지 만, 당신은 실제로 아무것도 배울 수 없을 것입니다. 우선, 코드 조각은 EndDate.Month에 의존하지 않습니다. 이건 옳을 수 없지, 그렇지?ENDDATE에 하루 한 날 또는 더 적은 STARTDATE의 일보다 –

답변

1

시작일의 날짜 값이 종료일의 날짜 값보다 커질 가능성이 있습니다. 이 경우는 있지만, 한 달

List<string> result = new List<string>(); 
DateTime startDate = new DateTime(2012, 1, 8); 
DateTime endDate = new DateTime(2013, 1, 3); 
DateTime temp = startDate; 
endDate = new DateTime (endDate.Year, endDate.Month, DateTime.DaysInMonth(endDate.Year,endDate.Month)); 
while (temp <= endDate) 
{ 
    Console.WriteLine((string.Format("{0}/{1}", temp.Month, temp.Year)); 
    temp = temp.AddMonth(1); 
} 
4
for 
(
    DateTime date = new DateTime(2012, 08, 01).AddMonths(1); 
    date <= new DateTime(2013, 03, 01); 
    date = date.AddMonths(1) 
) 
{ 
    Console.WriteLine(date.ToString("MM/yyyy")); 
} 

foreach (var date in MonthsBetween(08, 2012, 03, 2013)) 
{ 
    Console.WriteLine(date.ToString("MM/yyyy")); 
} 

참고 이 범위는 첫 번째 달을 제외합니다. 예를 들어 원하는 것으로 보입니다.

첫 번째 달을 건너 뛰지 않으려면 .AddMonths(1)을 시작 날짜를 만드는 줄에서 제거하십시오.

는 (개인적으로는 출력의 시작 월을 포함하는 것을 선호 싶지만, 그것은 당신이 무엇을 요구하지 않습니다.)

+1

는 지난 달에 설명하기 위해 실패 우리가 (MM/YYYY로 출력을 지정 OP 질문에 따라)하지 일, 월에만 관심이 있기 때문에 하루는 항상 1로 지정됩니다. 이 명확를 만들기 위해, 나는 달을 열거하는 방법을 추가 할 것입니다. 두 날짜 사이의 months_ _all 요구하는 경우 – Steve

+0

@ 스티브 내가 있으리라 믿고있어 (월 = 1 일 = 8과 ENDDATE에 대해 동일한을 사용하려고)하면 –

+1

아마도, 확실하지 않은, 그러나 나는 또한 월 2013도 포함됩니다 2012 1월 2013_ 3 포괄적 인 진술과 말 _From 1월 8일을 가정 할 수있다 그러나 이것은 OP – Steve

0

당신이 코드는 더 우아한 사용할 수 있습니다

for (DateTime date = StartDate; date <= EndDate; date = date.AddMonths(1)) 
    Console.WriteLine(date.ToString("MM/yyyy")); 
1

for 루프는 월 값이 증가함에 따라 DateTime.AddMonths과 같은 방법으로 사용할 수 있습니다.

DateTime dt1 = new DateTime(2012, 08, 01); 
DateTime dt2 = new DateTime(2013, 03, 01); 
DateTime dt3 = new DateTime(); 
for (dt3 = dt1.AddMonths(1); dt3 <= dt2; dt3 = dt3.AddMonths(1)) 
{ 
    Console.WriteLine(dt3.ToString("MM/yyyy")); 
} 

출력됩니다. 여기에 DEMO

09.2012 
10.2012 
11.2012 
12.2012 
01.2013 
02.2013 
03.2013 

.

0

하지 않음 시험의 끝에 ENDDATE를 정상화하는 것이 필요하다 어떻게 이런 일에 대해 :이처럼 사용할 수있는 다음

public IEnumerable<String> EachMonth(DateTime start, DateTime end) 
{ 
    for(var m = start.Date; m.Date <= end.Date; m = m.AddMonths(1)) 
     yield return m.ToString("MM/YYYY"); 
} 

을 그리고 :

여기
foreach (String month in EachMonth(StartDate, EndDate)) 
0
DateTime StartDate = Convert.ToDateTime("08/1/2012"); 
     DateTime EndDate = Convert.ToDateTime("03/1/2013"); 

     for (DateTime i = StartDate; i <= EndDate; i = i.AddMonths(1)) 
     { 
      Response.Write(i.ToString("MM") + "/" + i.ToString("yyyy")+"<br />"); 
     } 
관련 문제