Exemplo n.º 1
0
 /// <param name="dateRange">An open ended date range to determine the difference of</param>
 /// <exception cref="ArgumentException">End date of the date range must be greater than its start</exception>
 public DateDifference(IOpenEndedDateRange dateRange)
 {
     if (dateRange.End.HasValue)
     {
         if (dateRange.Start <= dateRange.End.Value)
         {
             _earlier = dateRange.Start;
             _later = dateRange.End.Value;
         }
         else
         {
             _earlier = dateRange.End.Value;
             _later = dateRange.Start;
         }
     }
     else
         throw new ArgumentException($"End date must be greater than {dateRange.Start:F}", nameof(dateRange));
 }
Exemplo n.º 2
0
 private static void ValidityCheck(IOpenEndedDateRange dateRange)
 {
     if (dateRange?.End != null)
         ValidityCheck(dateRange.Start, dateRange.End.Value);
 }
Exemplo n.º 3
0
        /// <inheritdoc cref="Overlaps(IDateRange, IDateRange, bool)" />
        public static bool Overlaps(this IOpenEndedDateRange dateRange, IOpenEndedDateRange compareRange, bool allowSameEndPoints = true)
        {
            if (dateRange == null || compareRange == null)
                return false;

            ValidityCheck(dateRange);
            ValidityCheck(compareRange);

            if (!dateRange.End.HasValue && compareRange.End.HasValue)
            {
                return allowSameEndPoints
                           ? compareRange.Start > dateRange.Start || compareRange.End.Value > dateRange.Start
                           : compareRange.Start >= dateRange.Start || compareRange.End.Value >= dateRange.Start;
            }

            if (dateRange.End.HasValue && !compareRange.End.HasValue)
            {
                return allowSameEndPoints
                           ? dateRange.Start > compareRange.Start || dateRange.End.Value > compareRange.Start
                           : dateRange.Start >= compareRange.Start || dateRange.End.Value >= compareRange.Start;
            }

            if (!dateRange.End.HasValue && !compareRange.End.HasValue)
                return true;

            return compareRange.End != null && dateRange.End != null &&
                   Date.Overlaps(dateRange.Start, dateRange.End.Value, compareRange.Start, compareRange.End.Value, allowSameEndPoints);
        }
Exemplo n.º 4
0
        /// <inheritdoc cref="Overlaps(IDateRange, IDateRange, bool)" />
        public static bool Overlaps(this IDateRange dateRange, IOpenEndedDateRange compareRange, bool allowSameEndPoints = true)
        {
            if (dateRange == null || compareRange == null)
                return false;

            if (compareRange.End.HasValue)
                return Date.Overlaps(dateRange.Start, dateRange.End, compareRange.Start, compareRange.End.Value, allowSameEndPoints);

            ValidityCheck(dateRange);
            ValidityCheck(compareRange);

            return allowSameEndPoints
                       ? dateRange.Start > compareRange.Start || dateRange.End > compareRange.Start
                       : dateRange.Start >= compareRange.Start || dateRange.End >= compareRange.Start;
        }
Exemplo n.º 5
0
        /// <inheritdoc cref="Within(DateTime, IDateRange, bool)" />
        public static bool Within(this DateTime? dateTime, IOpenEndedDateRange dateRange, bool allowSameEndPoints = true)
        {
            if (dateRange == null)
                return false;

            return dateTime?.Within(dateRange, allowSameEndPoints) ?? false;
        }
Exemplo n.º 6
0
        /// <inheritdoc cref="Within(DateTime, IDateRange, bool)" />
        public static bool Within(this DateTime dateTime, IOpenEndedDateRange dateRange, bool allowSameEndPoints = true)
        {
            if (dateRange == null)
                return false;

            return allowSameEndPoints
                       ? dateTime > dateRange.Start
                       : dateTime >= dateRange.Start;
        }