c# - Check if a date range is within a date range -


i have following class:

public class membership {     public datetime startdate { get; set; }     public datetime? enddate { get; set; } // if null lasts forever } 

i need make sure when adding following list new item doesn't overlap dates existing item:

var membership = new list<membership> {     new membership { startdate = datetime.utcnow.adddays(-10), enddate = datetime.utcnow.adddays(-5) },     new membership { startdate = datetime.utcnow.adddays(-5), enddate = null } }; 

for example doing:

var newitem = new membership { startdate = datetime.utcnow.adddays(-15), enddate = datetime.utcnow.adddays(-10) }; // allowed  var newitem2 = new membership { startdate = datetime.utcnow.adddays(-15), enddate = null }; // not allowed  if (allowededtoadd(newitem))     membership.add(newitem);  if (allowededtoadd(newitem2))     membership.add(newitem2); 

i thought simple far attempts have been wrong , i'm starting confuse myself , hoping had done similar share. thanks

basically, date range overlaps if of endings within other range, or vice versa.

static bool allowedtoadd(list<membership> membershiplist, membership newitem) {     return !membershiplist.any(m =>         (m.startdate < newitem.startdate &&          newitem.startdate < (m.enddate ?? datetime.maxvalue))         ||         (m.startdate < (newitem.enddate ?? datetime.maxvalue) &&          (newitem.enddate ?? datetime.maxvalue) <= (m.enddate ?? datetime.maxvalue))         ||         (newitem.startdate < m.startdate &&          m.startdate < (newitem.enddate ?? datetime.maxvalue))         ||         (newitem.startdate < (m.enddate ?? datetime.maxvalue) &&          (m.enddate ?? datetime.maxvalue) <= (newitem.enddate ?? datetime.maxvalue))         ); } 

with usage:

if (allowedtoadd(membershiplist, newitem))     membershiplist.add(newitem); 

Comments

Popular posts from this blog

c++ - Convert big endian to little endian when reading from a binary file -

C#: Application without a window or taskbar item (background app) that can still use Console.WriteLine() -

unicode - Are email addresses allowed to contain non-alphanumeric characters? -