Подтвердить что ты не робот

Как вы находите последний день месяца?

Возможный дубликат:
Как получить последний день месяца?

Пока у меня есть это:

DateTime createDate = new DateTime(year, month, 1).AddMonths(1).AddDays(-1);

Есть ли лучший способ?

4b9b3361

Ответ 1

Как насчет использования DaysInMonth:

DateTime createDate = new DateTime (year, month,
                                    DateTime.DaysInMonth(year, month));

(Обратите внимание, что это необходимо сделать в Noda Time...)

Ответ 2

Вы можете использовать метод DateTime.DaysInMonth(year,month), чтобы получить количество дней в любой месяц.

Ответ 3

Вот элегантный подход, который я нашел в полезной библиотеке расширений DateTime на CodePlex:

http://datetimeextensions.codeplex.com/

Вот пример кода:

    public static DateTime First(this DateTime current)
    {
        DateTime first = current.AddDays(1 - current.Day);
        return first;
    }

    public static DateTime First(this DateTime current, DayOfWeek dayOfWeek)
    {
        DateTime first = current.First();

        if (first.DayOfWeek != dayOfWeek)
        {
            first = first.Next(dayOfWeek);
        }

        return first;
    }

    public static DateTime Last(this DateTime current)
    {
        int daysInMonth = DateTime.DaysInMonth(current.Year, current.Month);

        DateTime last = current.First().AddDays(daysInMonth - 1);
        return last;
    }

В нем есть еще несколько полезных расширений, которые могут вам помочь.

Ответ 4

если вас интересует пользовательская версия кода:

var anyDt = DateTime.Now;
var lastDayOfMonth = anyDt.AddMonths(1).AddDays(anyDt.AddMonths(1).Day).Date;

или

var anyDt = DateTime.Now;
var lastDayOfMonth = anyDt.AddDays(1-anyDt.Day).AddMonths(1).AddDays(-1).Date; 

или как метод:

DateTime LastDayInMonth(DateTime anyDt)
   { return anyDt.AddMonths(1).AddDays(anyDt.AddMonths(1).Day).Date; }

или как метод расширения:

DateTime LastDayInMonth(DateTime this anyDt)
   { return anyDt.AddMonths(1).AddDays(anyDt.AddMonths(1).Day).Date; }