DateTime.AddMonths добавление только месяц, а не дни - PullRequest
20 голосов
/ 17 июня 2010

Допустим, у меня есть 28 февраля 2010 и добавляю один месяц к этой дате, используя AddMonths(1) ...
, в результате получается 28 марта , но не 31 марта , что я хочу.
Есть ли способ немного подправить, чтобы это работало без добавления пользовательского кода?

Редактировать: мне не нужен последний деньмесяца, на самом деле мне нужно добавить один месяц, но когда это последний день месяца, мне нужно найти последний день следующего месяца.

Ответы [ 15 ]

0 голосов
/ 17 июня 2010
public static class DateTimeExtensions
{
    public static DateTime AddMonthsCustom(this DateTime source, int months)
    {
        DateTime result = source.AddMonths(months);
        if (source.Day != DateTime.DaysInMonth(source.Year, source.Month))
            return result;

        return new DateTime(result.Year, result.Month,
                            DateTime.DaysInMonth(result.Year, result.Month),
                            result.Hour, result.Minute, result.Second,
                            result.Millisecond, result.Kind);
    }
}
0 голосов
/ 17 июня 2010
if(yourDate.Day == DaysInMonth(yourDate.Year,yourDate.Month)) //check for last day
    yourDate.AddDays(DateTime.DaysInMonth(yourDate.Year,(yourDate.Month+1)%12));
0 голосов
/ 17 июня 2010

Я решил это сейчас, проверив, является ли это последний день месяца, используя GetLastDayInCurrentMonth .Если это так, я использую

DateTime nextMonth = date.AddDays(1).AddMonths(1).AddDays(-1);

Если это не последний день, я просто использую AddMonths (1)

Спасибо, ребята!

0 голосов
/ 17 июня 2010

Попробуйте перегрузить свойство day и установить для него значение 32. Когда это делается в JavaScript, я считаю, что по умолчанию оно возвращается к последнему дню любого месяца, в котором вы находитесь.

0 голосов
/ 17 июня 2010

Нет - это не учитывается. Это собственный код!

Будет ли ваш код интересен только в последний день месяца или вы хотите, чтобы код добавлял месяц к любой дате, но учитывает, когда указанная дата является последним днем ​​месяца?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...