public static bool IsDayInRange(DateTime source, DateTime target, CalendarViewingMode mode) { if (source.Year != target.Year) { return(false); } if (mode == CalendarViewingMode.Monthly) { return((source.Month == target.Month) ? true : false); } else if (mode == CalendarViewingMode.Daily) { return((source.Day == target.Day) ? true : false); } else if (mode == CalendarViewingMode.Weekly) { DateTime wkb; DateTime wke; FindRangeOfWeek(source, out wkb, out wke); // or compare them by converting into OADate return((target >= wkb && target < wke) ? true : false); } else { return(false); // or throw exception (Invalid CalendarViewingMode) } }
public static List <DateTime> FindAllRecurringDate(IEvent target, DateTime ViewingDate, CalendarViewingMode mode) { List <DateTime> result = new List <DateTime>(); DateTime rngb = DateTime.MinValue; // beginning of range DateTime rnge = DateTime.MinValue; // ending of range RecurringFrequencies rf = target.RecurringFrequency; switch (mode) { case CalendarViewingMode.Monthly: FindRangeOfMonth(ViewingDate, out rngb, out rnge); break; case CalendarViewingMode.Weekly: FindRangeOfWeek(ViewingDate, out rngb, out rnge); break; default: break; } // Target is not a recurring event if (target.RecurringFrequency == RecurringFrequencies.None) { if (target.OriginalBeginningTime > rngb && target.OriginalBeginningTime < rnge) { result.Add(target.OriginalBeginningTime); } return(result); } if (target.ThisDayForwardOnly && target.OriginalBeginningTime > rnge) { return(result); } DateTime iter = target.ThisDayForwardOnly ? ((target.OriginalBeginningTime > rngb) ? target.OriginalBeginningTime : rngb) : rngb; for (; iter < rnge; iter = iter.AddDays(1)) { if (((byte)iter.DayOfWeek.ToCustomWeekday() & (byte)rf) >= 1) { result.Add(iter); } } return(result); }