Example #1
0
        private DateTime FindPrevRelevantDate(DateTime datetime)
        {
            var relevantDateTime = new DateTime();

            day   = datetime.Day;
            month = datetime.Month;
            year  = datetime.Year;
            var  minDay     = Days.Min();
            var  minMonth   = Months.Min();
            var  minYear    = Years.Min();
            var  minDate    = new DateTime(minYear, minMonth, minDay).Date;
            bool subtracted = false;

            while (datetime.Date != minDate)
            {
                if (DaysOfWeek.Contains((int)datetime.DayOfWeek))
                {
                    relevantDateTime = datetime;
                    break;
                }
                else
                {
                    subtracted = false;
                }
                SubtractNext(Days, ref day, ref subtracted);
                var monthSubtracted = SubtractNext(Months, ref month, ref subtracted);
                if (monthSubtracted)
                {
                    day = GetClosestDay(datetime, year, month);
                }
                SubtractNext(Years, ref year, ref subtracted);
                datetime = new DateTime(year, month, day,
                                        datetime.Hour, datetime.Minute, datetime.Second, datetime.Millisecond);
            }
            return(relevantDateTime);
        }