2013-09-06 19 views
13

मैं एक समारोह जो सी # में दो दिनांकों के बीच सभी महीने के नाम देता है
दिए गए दो दिनांकों

MyFunction(DateTime date1,DateTime date2) 
{ 

//some code 
return listOfMonths; 
} 

आप मेरी मदद कर सकते

List<string> liMonths = MyFunction(date1,date2); 

मेरी समारोह है बनाने के लिए कोशिश कर रहा हूँ के बीच सभी महीनों के नाम प्राप्त करें मैं यह कैसे कर सकता हूं

+2

यह कैसे लागू करने पर किसी भी विचार है? – christopher

+0

क्या परिणाम में 'date1' और' date2' के महीनों के नाम शामिल किए जाने चाहिए? – ykb

+0

@ सुहान ओपी नामों की मांग कर रहा है, महीनों की संख्या –

उत्तर

29

कोई LINQ-समाधान अभी तक?

var start = new DateTime(2013, 1, 1); 
var end = new DateTime(2013, 6, 22); 

// set end-date to end of month 
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.ToString("MMMM")); 
+0

"यह प्रश्न पहले से ही एक उत्तर है:" से बेहतर समाधान है। –

5

लूप प्रारंभ दिनांक 1 दिनांक 2 तक शुरू करें। अपने लूप के प्रत्येक चरण के लिए एक महीने जोड़ें और महीने में अपना रिटर्न वैरिएबल भरें।

मैं अपने उद्देश्य मेटा भाषा में लिखने की कोशिश:

DateTime currDate = date1 
List myList = new List(); 
while (currDate < date2) { 
    myList.add(getMonthName(currDate)); 
    currDate = currDate.addMonth(1); 
} 
+0

मैंने आपको कोड का उपयोग किया और महसूस किया कि 'addMonth (1) ' CurrDate के मान को नहीं बदलता है, आपको 'currDate.addMonth (1) 'को एक नए चर के लिए असाइन करना होगा और उस चर को' currDate' पर पुन: असाइन करना होगा ताकि उसका मान बदल सके। बस यह करें जबकि (currDate Dev

+1

हाय, मैंने अपना जवाब तय कर दिया है। currDate = currDate.addMonth (1) के साथ; –

1
List<string> MonthNames(DateTime date1, DateTime date2) 
    { 
     var monthList = new List<string>(); 

     while (date1 < date2) 
     { 
      monthList.Add(date1.ToString("MMMM/yyyy")); 
      date1 = date1.AddMonths(1); 
     } 

     return monthList; 
    } 
2
DateTime from; 
DateTime to; 


var source = from.Month > to.Month ? 
       Enumerable.Range(from, 12).Concat(Enumerable.Range(1, to.Month)) 
      : Enumerable.Range(1, 12) 
       .SkipWhile(m => m >= from.Month) 
       .TakeWhile(m => m <= to.Month) 
var monthes = source 
    .Select(m => CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(m)); 
+1

यह अच्छा है, लेकिन लगता है कि यह नवंबर से मई के बाद यदि आप असफल हो जाएंगे। – Sayse

+1

@Sayse: हाँ, यकीन है। अपडेट किया गया। –

+1

यह अप्रैल 2013 - अप्रैल 2014 के बाद भी विफल रहता है, लेकिन यह प्रश्न के दायरे से बाहर हो सकता है :) – Sayse

4

आप एक सहायक समारोह

IEnumerable<DateTime> GetDates(DateTime date1, DateTime date2) 
{ 
    while (date1 <= date2) 
    { 
     yield return date1; 
     date1 = date1.AddMonths(1); 
    } 

    if (date1 > date2) 
    { 
     // Include the last month 
     yield return date1; 
    } 
} 

फिर साथ Linq का उपयोग कर सकते myfunction निम्नलिखित

1) शामिल साल नाम

List<string> MyFunction(DateTime date1, DateTime date2) { 
    return GetDates(date1,date2).Select(x => x.ToString("MMMM yyyyy")).ToList(); 
} 

2 में से एक हो सकता है) डुप्लिकेट के साथ बस महीने का नाम

List<string> MyFunction(DateTime date1, DateTime date2) { 
    return GetDates(date1,date2).Select(x => x.ToString("MMMM")).ToList(); 
} 

3) विशिष्ट महीने के नामों

List<string> MyFunction(DateTime date1, DateTime date2) { 
    return GetDates(date1,date2).Select(x => x.ToString("MMMM")).Distinct().ToList(); 
} 
1
static IEnumerable<DateTime> monthsBetween(DateTime d0, DateTime d1) 
{ 
    return Enumerable.Range(0, (d1.Year - d0.Year) * 12 + (d1.Month - d0.Month + 1)) 
        .Select(m => new DateTime(d0.Year, d0.Month, 1).AddMonths(m)); 
} 
1

यहाँ आप के लिए एक एक लाइनर है।

var date1 = new DateTime(2013, 02, 17); 
var date2 = new DateTime(2013, 09, 06); 

var monthsBetween = DateTimeFormatInfo.CurrentInfo.MonthNames.Where((_, i) => ++i >= date1.Month && i <= date2.Month); 
1
private static List<string> MyFunction(DateTime date1, DateTime date2) 
     { 

      var listOfMonths=new List<string>(); 
      if (date1.CompareTo(date2) == 1) 
      { 
       var temp = date2; 
       date2 = date1; 
       date1 = temp; 
      } 

      var mosSt = date1.Month; 
      var mosEn = date2.Month; 
      var yearSt = date1.Year; 
      var yearEn = date2.Year; 

      while (mosSt < mosEn || yearSt < yearEn) 
      { 
       var temp = new DateTime(yearSt, mosSt, 1); 
       listOfMonths.Add(temp.ToString("MMMM", CultureInfo.InvariantCulture)); 
       mosSt++; 
       if (mosSt < 13) continue; 
       yearSt++; 
       mosSt = 1; 
      } 

      return listOfMonths; 
     } 
संबंधित मुद्दे