private static DateTime GetEnd(DateTime time, TimeInterval interval, TimeIntervalOptions opts) { DateTime result; switch (interval) { case TimeInterval.Monthly: result = time.AddMonths(1); break; case TimeInterval.Weekly: result = time.AddDays(7); break; case TimeInterval.Daily: default: result = time.AddDays(1); break; } if (HasFlag(opts, TimeIntervalOptions.Inclusive)) { result = result.AddDays(-1); } return(result); }
public static DateRange GetRange(DateTime date, TimeInterval interval, TimeIntervalOptions opts) { DateTime start = GetStart(date.Date, interval, opts); return(new DateRange() { StartDate = start, EndDate = GetEnd(start, interval, opts) }); }
private static DateTime GetStart(DateTime time, TimeInterval interval, TimeIntervalOptions opts) { if (!HasFlag(opts, TimeIntervalOptions.FitToPeriod)) { return(time); } switch (interval) { case TimeInterval.Monthly: return(time.AddDays(-(time.Day - 1))); case TimeInterval.Weekly: return(time.AddDays(-(int)time.DayOfWeek)); case TimeInterval.Daily: default: return(time); } }
private static bool HasFlag(TimeIntervalOptions opts, TimeIntervalOptions flag) { return(((int)opts & (int)flag) != 0); }