示例#1
0
		public static IEnumerable<DateTime> RecurrencyDays(
			RecurrencyFrequency frequency, DateTime start, DateTime end, DateTime startEventDate, DateTime? endEventDate = null)
		{
			var startRecurrencyDate = StartRecurrencyDate(frequency, start, startEventDate);

			if (!startRecurrencyDate.HasValue)
			{
				return Enumerable.Empty<DateTime>();
			}

			if (frequency == RecurrencyFrequency.None)
			{
				return new[] { startRecurrencyDate.Value };
			}

			IList<DateTime> recurrencies = new List<DateTime>();

			var endRangeDate = endEventDate.HasValue ? Comparer.Min(end, endEventDate) : end;

			while (startRecurrencyDate <= endRangeDate)
			{
				recurrencies.Add(startRecurrencyDate.Value);

				startRecurrencyDate = NextDate(startRecurrencyDate.Value, frequency);
			}

			return recurrencies;
		}
示例#2
0
        public static IEnumerable <DateTime> RecurrencyDays(
            RecurrencyFrequency frequency, DateTime start, DateTime end, DateTime startEventDate, DateTime?endEventDate = null)
        {
            var startRecurrencyDate = StartRecurrencyDate(frequency, start, startEventDate);

            if (!startRecurrencyDate.HasValue)
            {
                return(Enumerable.Empty <DateTime>());
            }

            if (frequency == RecurrencyFrequency.None)
            {
                return(new[] { startRecurrencyDate.Value });
            }

            IList <DateTime> recurrencies = new List <DateTime>();

            var endRangeDate = endEventDate.HasValue ? Comparer.Min(end, endEventDate) : end;

            while (startRecurrencyDate <= endRangeDate)
            {
                recurrencies.Add(startRecurrencyDate.Value);

                startRecurrencyDate = NextDate(startRecurrencyDate.Value, frequency);
            }

            return(recurrencies);
        }
示例#3
0
		public static DateTime? StartRecurrencyDate(RecurrencyFrequency recurrency, DateTime start, DateTime eventDate)
		{
			if (eventDate >= start)
			{
				return eventDate;
			}

			DateTime? startRecurrencyDate;

			switch (recurrency)
			{
				case RecurrencyFrequency.None:
					return null;

				case RecurrencyFrequency.Daily:
					return start;

				case RecurrencyFrequency.Weekly:
					startRecurrencyDate = start.FirstDayOfWeek(eventDate.DayOfWeek);
					break;

				case RecurrencyFrequency.Biweekly:
					startRecurrencyDate = start.FirstDayOfWeek(eventDate.DayOfWeek);
					var deltaDays = start.Subtract(eventDate).TotalDays.RoundToInt();
					startRecurrencyDate = startRecurrencyDate.Value.AddDays(14 - deltaDays);
					break;

				case RecurrencyFrequency.Monthly:
					startRecurrencyDate = new DateTime(start.Year, eventDate.Month, eventDate.Day);
					break;

				case RecurrencyFrequency.Yearly:
					startRecurrencyDate = new DateTime(start.Year, eventDate.Month, eventDate.Day);
					break;

				default:
					new ArgumentException("The specified recurrency is not valid.").Throw();
					return null;
			}

			while (startRecurrencyDate < start)
			{
				startRecurrencyDate = NextDate(startRecurrencyDate.Value, recurrency);
			}

			return startRecurrencyDate.Value.Date.Add(eventDate.TimeOfDay);
		}
示例#4
0
        public static DateTime?StartRecurrencyDate(RecurrencyFrequency recurrency, DateTime start, DateTime eventDate)
        {
            if (eventDate >= start)
            {
                return(eventDate);
            }

            DateTime?startRecurrencyDate;

            switch (recurrency)
            {
            case RecurrencyFrequency.None:
                return(null);

            case RecurrencyFrequency.Daily:
                return(start);

            case RecurrencyFrequency.Weekly:
                startRecurrencyDate = start.FirstDayOfWeek(eventDate.DayOfWeek);
                break;

            case RecurrencyFrequency.Biweekly:
                startRecurrencyDate = start.FirstDayOfWeek(eventDate.DayOfWeek);
                var deltaDays = start.Subtract(eventDate).TotalDays.RoundToInt();
                startRecurrencyDate = startRecurrencyDate.Value.AddDays(14 - deltaDays);
                break;

            case RecurrencyFrequency.Monthly:
                startRecurrencyDate = new DateTime(start.Year, eventDate.Month, eventDate.Day);
                break;

            case RecurrencyFrequency.Yearly:
                startRecurrencyDate = new DateTime(start.Year, eventDate.Month, eventDate.Day);
                break;

            default:
                throw new ArgumentException("The specified recurrency is not valid.");
            }

            while (startRecurrencyDate < start)
            {
                startRecurrencyDate = NextDate(startRecurrencyDate.Value, recurrency);
            }

            return(startRecurrencyDate.Value.Date.Add(eventDate.TimeOfDay));
        }
示例#5
0
		public static DateTime NextDate(this DateTime date, RecurrencyFrequency frequency)
		{
			var addTimeSpan = timeSpanToAddBasedOnFrequency[frequency];

			return addTimeSpan(date);
		}
示例#6
0
        public static DateTime NextDate(this DateTime date, RecurrencyFrequency frequency)
        {
            var addTimeSpan = timeSpanToAddBasedOnFrequency[frequency];

            return(addTimeSpan(date));
        }