/// <summary> /// Add an interval of time (or some multiple thereof) to a DateTime. /// </summary> public static DateTime AddInterval(this DateTime dt, Time.IntervalType interval, int numberOfIntervals) { if (interval == Time.IntervalType.Day) return dt.AddDays(numberOfIntervals); else if (interval == Time.IntervalType.Week) return dt.AddDays(7 * numberOfIntervals); else if (interval == Time.IntervalType.Month) return dt.AddMonths(numberOfIntervals); else if (interval == Time.IntervalType.Quarter) // won't necessarily work for qtr end dates return dt.AddMonths(3 * numberOfIntervals); else if (interval == Time.IntervalType.Year) return dt.AddYears(numberOfIntervals); else return dt; }
/// <summary> /// Maps a function to a timeline, starting on a given date. /// </summary> // TODO: Get rid of Time.IntervalType public static Tnum TemporalMap(Func<Tnum,Tnum> fcn, Tdate startDate, Tnum intervalCount, Time.IntervalType intervalType) { return fcn(Time.IntervalsSince(startDate, startDate.AddYears(intervalCount), intervalType)); }
/// <summary> /// Subtract an interval of time from a DateTime. /// </summary> public static DateTime SubtractInterval(this DateTime dt, Time.IntervalType interval) { if (interval == Time.IntervalType.Day) return dt.AddDays(-1); else if (interval == Time.IntervalType.Week) return dt.AddDays(-7); else if (interval == Time.IntervalType.Month) // not reversible version of AddInterval return dt.AddMonths(-1); else if (interval == Time.IntervalType.Quarter) // won't necessarily work for qtr end dates return dt.AddMonths(-3); else if (interval == Time.IntervalType.Year) return dt.AddYears(-1); else return dt; }