예제 #1
0
        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);
        }
예제 #2
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);
            }
        }