How to check if a DateTime range is within another 3 month DateTime range

后端 未结 5 1857
长情又很酷
长情又很酷 2021-01-12 08:37

Hi I have a Start Date and End Date per record in a db.

I need to check to see where the time period falls in a 2 year period broken into two lots of quarters then d

5条回答
  •  爱一瞬间的悲伤
    2021-01-12 09:12

    You would call IntervalInQuarters as follows:

    IntervalInQuarters(new DateTime(2007, 10, 10), new DateTime(2009, 10, 11));
    

    The function returns a list of quarter start dates. Note that the range of quarters searched is defined within the function itself. Please edit as appropriate for your situation. They key point is to make sure the interval/quarter intersection logic is right.

    private List IntervalInQuarters(DateTime myStartDate, DateTime myEndDate)
    {
        DateTime quarterStart = new DateTime(2006, 06, 01);
        DateTime nextQuarterStart = new DateTime(2006, 09, 01);
        DateTime finalDate = new DateTime(2011, 01, 01);
        List foundQuarters = new List();
    
        while (quarterStart < finalDate)
        {
            // quarter intersects interval if:
            // its start/end date is within our interval
            // our start/end date is within quarter interval
            DateTime quarterEnd = nextQuarterStart.AddDays(-1);
            if (DateInInterval(myStartDate, quarterStart, quarterEnd) ||
                DateInInterval(myEndDate, quarterStart, quarterEnd) ||
                DateInInterval(quarterStart, myStartDate, myEndDate) ||
                DateInInterval(quarterEnd, myStartDate, myEndDate))
            {
                foundQuarters.Add(quarterStart);
            }
    
            quarterStart = nextQuarterStart;
            nextQuarterStart = nextQuarterStart.AddMonths(3);
        }
    
        return foundQuarters;
    }
    
    private bool DateInInterval(DateTime myDate, DateTime intStart, DateTime intEnd)
    {
        return ((intStart <= myDate) && (myDate <= intEnd));
    }
    

提交回复
热议问题