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
Post a Comment