public static long DateDiff(Recur.FrequencyType frequency, Date_Time dt1, Date_Time dt2, DayOfWeek firstDayOfWeek) { if (frequency == Recur.FrequencyType.YEARLY) { return(dt2.Year - dt1.Year); } if (frequency == Recur.FrequencyType.MONTHLY) { return((dt2.Month - dt1.Month) + (12 * (dt2.Year - dt1.Year))); } if (frequency == Recur.FrequencyType.WEEKLY) { // Get the week of year of the time frame we want to calculate int firstEvalWeek = _Calendar.GetWeekOfYear(dt2.Value, System.Globalization.CalendarWeekRule.FirstFourDayWeek, firstDayOfWeek); // Count backwards in years, calculating how many weeks' difference we have between // first and second dates Date_Time evalDate = dt2.Copy(); while (evalDate.Year > dt1.Year) { firstEvalWeek += _Calendar.GetWeekOfYear(new DateTime(evalDate.Year - 1, 12, 31), System.Globalization.CalendarWeekRule.FirstFourDayWeek, firstDayOfWeek); evalDate = evalDate.AddYears(-1); } // Determine the difference, in weeks, between the start date and the evaluation period. int startWeek = _Calendar.GetWeekOfYear(dt1.Value, System.Globalization.CalendarWeekRule.FirstFourDayWeek, firstDayOfWeek); return(firstEvalWeek - startWeek); } TimeSpan ts = dt2 - dt1; if (frequency == Recur.FrequencyType.DAILY) { return(Round(ts.TotalDays)); } if (frequency == Recur.FrequencyType.HOURLY) { return(Round(ts.TotalHours)); } if (frequency == Recur.FrequencyType.MINUTELY) { return(Round(ts.TotalMinutes)); } if (frequency == Recur.FrequencyType.SECONDLY) { return(Round(ts.TotalSeconds)); } return(0); }
public static Date_Time AddFrequency(Recur.FrequencyType frequency, Date_Time dt, int interval) { switch (frequency) { case Recur.FrequencyType.YEARLY: return(dt.AddYears(interval)); case Recur.FrequencyType.MONTHLY: return(dt.AddMonths(interval)); case Recur.FrequencyType.WEEKLY: return(dt.AddDays(interval * 7)); case Recur.FrequencyType.DAILY: return(dt.AddDays(interval)); case Recur.FrequencyType.HOURLY: return(dt.AddHours(interval)); case Recur.FrequencyType.MINUTELY: return(dt.AddMinutes(interval)); case Recur.FrequencyType.SECONDLY: return(dt.AddSeconds(interval)); default: return(dt); } }