public static DateD operator +(DateD d, int days) { int daysRemain = Math.Abs(days); DateD result = new DateD(d.Year, d.Month, d.Day); while (daysRemain > 0) { if (days > 0) { int count = DaysInMonth(result.Month, result.Year) - result.Day; if (daysRemain > count) { daysRemain -= count + 1; result.Month++; result.Day = 1; if (result.Month > 12) { result.Year++; result.Month = 1; } } else { result.Day += daysRemain; break; } } else { int count = result.Day; if (daysRemain >= count) { daysRemain -= count; result.Month--; result.Day = DaysInMonth(result.Month, result.Year); if (result.Month < 1) { result.Year--; result.Month = 12; } } else { result.Day -= daysRemain; break; } } } return(result); }
public static int operator -(DateD d1, DateD d2) { DateD dateMin = d1 < d2 ? d1 : d2; DateD dateMax = d1 > d2 ? d1 : d2; int monthTmp = dateMin.Month; int YearTmp = dateMin.Year; int res = dateMax.Day - dateMin.Day; while (monthTmp != dateMax.Month || YearTmp != dateMax.Year) { res += DaysInMonth(monthTmp, YearTmp); monthTmp++; if (monthTmp > 12) { monthTmp = 1; YearTmp++; } } return(d1 > d2 ? res : -res); }