public static ExtendedDateTime AddMonths(ExtendedDateTime e, int monthsToAdd, DayExceedsDaysInMonthStrategy dayExceedsDaysInMonthStrategy) { var monthTotal = e.Month + monthsToAdd; var month = monthTotal % 12; if (month == 0) { month = 12; } var year = e.Year + (monthTotal - 1) / 12; var day = e.Day; if (day > DaysInMonth(year, month)) { switch (dayExceedsDaysInMonthStrategy) { case DayExceedsDaysInMonthStrategy.RoundDown: day = DaysInMonth(year, month); break; case DayExceedsDaysInMonthStrategy.Overflow: day = day - DaysInMonth(year, month); monthTotal = month + 1; month = monthTotal % 12; if (month == 0) { month = 12; } year = e.Year + (monthTotal - 1) / 12; break; } } var extendedDateTime = new ExtendedDateTime(year, month, e.Day, e.Hour, e.Minute, e.Second, e.UtcOffset.Hours, e.UtcOffset.Minutes); extendedDateTime.YearFlags = e.YearFlags; extendedDateTime.MonthFlags = e.MonthFlags; extendedDateTime.DayFlags = e.DayFlags; extendedDateTime.Precision = e.Precision; return(extendedDateTime); }
public ExtendedDateTime AddMonths(int count, DayExceedsDaysInMonthStrategy dayExceedsDaysInMonthStrategy = DayExceedsDaysInMonthStrategy.RoundDown) { return(ExtendedDateTimeCalculator.AddMonths(this, count, dayExceedsDaysInMonthStrategy)); }