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