compare two dates

I have 4 date values :
 
first 2
begindate1 and enddate1

second 2
begindate2 and enddate2

i am going to compare begindate2 and enddate2 with begindate1 and enddate1 and the second set of dates cannot fall between first set of dates.

here is an example of what i want

begindate1 = 7/1/2010
enddate1 = 7/31/2010

if begindate2 = 6/1/2010
end date 2 = 6/30/2010 then true

if begindate2 = 8/1/2010
end date 2 = 8/30/2010 then true

if begindate2 = 7/10/2010
end date 2 = 7/20/2010 then false

how do i do this check.
pratikshahseAsked:
Who is Participating?
 
illusioSoftware Architect / Team LeaderCommented:
geez what an if constructions...

if you are sure that the begindates are smaller then the enddates:
return  (edt2 < bdt1 || edt1 < bdt2);

if you aren't sure about that:
return (bdt1<edt1 && bdt2<edt2) && (edt2 < bdt1 || edt1 < bdt2);

Peter
0
 
gmilhonCommented:
Just check both values with one if statement...

if (begindate2 > begindate1) and (enddate2 < enddate1) {
    // True code here
} else {
    // False code here
}
0
 
anarki_jimbelCommented:
I believe the following check would be sufficient:
        private void button1_Click(object sender, EventArgs e)
        {
            DateTime begindate1 = new DateTime(2010, 07, 01);
            DateTime enddate1 = new DateTime(2010, 07, 31);
            DateTime begindate2 = new DateTime(2010, 07, 10);
            DateTime enddate2 = new DateTime(2010, 07, 20);
            bool notOverlap = checkNotOverlapping(begindate1, enddate1, begindate2, enddate2);
            MessageBox.Show("result = " + notOverlap.ToString());
        }

        private bool checkNotOverlapping(DateTime begindate1, DateTime enddate1, DateTime begindate2, DateTime enddate2)
        {
            bool notOverlap = true;
            // argument checking:
            if((begindate1>enddate1) || (begindate2>enddate2))
            {
                throw new ArgumentException("Start date cannot be greater than end date");
            }

            if (!((begindate1 > enddate2) || begindate2 > enddate1))
            {
                notOverlap = false;
            }
            return notOverlap;
        }

Open in new window

0
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
anarki_jimbelCommented:
Really above I check if the second period starts AFTYER the first one , or vice versa. If we need to check the second one falls INTO the first one (or vice versa) - it will be a different check, something like like gmilhon showed.
0
 
MikkkCommented:

if begindate1 < begindate2 then
  if enddate1 < begindate2 then
    'not overlapped
  else
    'overlapped
  end if
else
  if enddate2 < begindate1 then
    'not overlapped
  else
    'overlapped
  end if
end if

Open in new window

0
 
sentnerCommented:
If you only care if the second date pair is fully encompased in the first range, and not just overlapping, then gmilhon's solution should work.

However, if you need to see if they overlap at all, you need something like:

if (begindate2 >= begindate1) and (begindate2 <= enddate1)
  or (enddate2 >= begindate1) and (enddate2 <= enddate1)
  or (begindate1 >= begindate2) and (begindate1 <= enddate2)
  or (enddate1 >= begindate2) and (enddate1 <= enddate2)  {
    // True code here
} else {
    // False code here
}
0
 
stagepCommented:
We need to know what you mean exactly by "the second set of dates cannot fall between first set of dates". Based on your example, what is the result for 6/15 to 7/15? true or false?
0
 
pratikshahseAuthor Commented:
stagep

the scenario that you are talking about in that case

if dates are (6/15 to 7/15)  (one of the dates falls in between the first date range)
{
message "overlapping dates found";
}
else
{
valid dates.
}
0
 
pratikshahseAuthor Commented:
stagep

if the dates are 7/15 - 8/15
{
message "overlapping dates found";
}
else
{
valid dates.

}
0
 
stagepCommented:
then illusio has the correct answer as the second range of dates must either end before the first date range starts, or start after the the first date range ends.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.