Перечислите месяцы между двумя датами - программирование

Перечислите месяцы между двумя датами

Я хотел бы знать, когда даны даты начала и окончания, как можно получить месяцы и год между двумя датами.

Например: Start Date: '1/1/2011'(mm/dd/yyyy) и End date :'11/30/2011'. Для получения месяца и года нужно January,2011; February,2011; March,2011; and so on till November,2011

4b9b3361

Ответ 1

Здесь мы идем

    public static IEnumerable<Tuple<string, int>> MonthsBetween(
            DateTime startDate,
            DateTime endDate)
    {
        DateTime iterator;
        DateTime limit;

        if (endDate > startDate)
        {
            iterator = new DateTime(startDate.Year, startDate.Month, 1);
            limit = endDate;
        }
        else
        {
            iterator = new DateTime(endDate.Year, endDate.Month, 1);
            limit = startDate;
        }

        var dateTimeFormat = CultureInfo.CurrentCulture.DateTimeFormat;
        while (iterator <= limit)
        {
            yield return Tuple.Create(
                dateTimeFormat.GetMonthName(iterator.Month),
                iterator.Year);                
            iterator = iterator.AddMonths(1);
        }
    }

И, очевидно, вы называете это

var startDate = DateTime.ParseExact("01/01/2011", "MM/dd/yyyy");
var endDate = DateTime.ParseExact("11/30/2011", "MM/dd/yyyy");

var months = MonthsBetween(startDate, endDate);

Результаты должны быть чем-то вроде

{
    {  "January", 2011  },
    {  "February", 2011  },
    {  "March", 2011  },
    {  "April", 2011  },
    {  "May", 2011  },
    {  "June", 2011  },
    {  "July", 2011  },
    {  "August", 2011  },
    {  "September", 2011  },
    {  "October", 2011  },
    {  "November", 2011  },
}

Месячные имена зависят от вашей культуры, которая, я думаю, именно то, что вы просили, правильно?

Ответ 2

Вы можете начать с цикла while, где дата начала меньше или равна дате окончания

В нем вытащите соответствующую часть месяца и года из даты начала и сохраните их (возможно, у вас есть конкретный класс или как), затем увеличивайте начальную дату на 1 месяц, используя AddMonths(1)

//something on these lines 
while(startdate <= enddate)
{
// pull out month and year
startdate = startdate.AddMonths(1);
}

Ответ 3

Вы можете использовать функцию Enumerable.Range для получения месяца и года между двумя датами,

var start = new DateTime(2011, 1, 1);
var end = new DateTime(2011, 11, 30);

var diff = Enumerable.Range(0, 13).Select(a => start.AddMonths(a))
           .TakeWhile(a => a <= end)
           .Select(a => String.Concat(a.ToString("MMMM") + ", " + a.Year));

Ответ 4

Используйте эту формулу:

((date1.Year - date2.Year) * 12) + date1.Month - date2.Month

И вы получите количество месяцев.

Используйте это соответствующим образом, и вы взламываете его.

Добро пожаловать в Stackoverflow, здесь Hardwork - это ваша роль, и вы должны думать о том, что братство должно делать, когда у вас есть проблема.