I have to calculate date intervals between two global dates depending on the inclusion of certain days of the week, such as monday to wednesday. All you need is two calendars and check boxes for the days of the week to include. This is the calculation for working out the dates:-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | DateRangeOutput = ""; string DateFrom = Date1.Text; string[] TmpArr = DateFrom.Split('/'); int DayFrom = Convert.ToInt32(TmpArr[0]); int MonthFrom = Convert.ToInt32(TmpArr[1]); int YearFrom = Convert.ToInt32(TmpArr[2]); DateTime MasterFrom = new DateTime(YearFrom, MonthFrom, DayFrom); string DateTo = Date2.Text; TmpArr = DateTo.Split('/'); int DayTo = Convert.ToInt32(TmpArr[0]); int MonthTo = Convert.ToInt32(TmpArr[1]); int YearTo = Convert.ToInt32(TmpArr[2]); DateTime MasterTo = new DateTime(YearTo, MonthTo, DayTo); //DayOfWeek TDay=MasterFrom.DayOfWeek; int CDay = Convert.ToInt32(MasterFrom.DayOfWeek); bool AddTo=IsDayChecked(CDay); DateTime StartDate = new DateTime(); DateTime EndDate = new DateTime(); bool StartDateCont = true; bool EndDateCont = true; if(AddTo){ StartDate=MasterFrom; EndDate=MasterFrom; }else{ StartDateCont=false; EndDateCont = false; } DateTime PointerDate=new DateTime(YearFrom,MonthFrom,DayFrom+1); int DayCount=1; while(PointerDate<=MasterTo){ CDay=Convert.ToInt32(PointerDate.DayOfWeek); AddTo = IsDayChecked(CDay); if(AddTo){ if (!StartDateCont) { StartDate = PointerDate; StartDateCont = true; } EndDate=PointerDate; }else{ if (StartDateCont) AddDates(StartDate.ToString("dd-MM-yyyy"), EndDate.ToString("dd-MM-yyyy")); StartDateCont=false; } DayCount++; //PointerDate=new DateTime(YearFrom,MonthFrom,DayFrom+DayCount); PointerDate=PointerDate.AddDays(1); } if(StartDateCont){ EndDate = new DateTime(YearFrom, MonthFrom , DayFrom ).AddDays(DayCount - 1); //alert(DayCount); AddDates(StartDate.ToString("dd-MM-yyyy"), EndDate.ToString("dd-MM-yyyy")); } |
The following code is what i do with the dates:-
1 2 3 4 5 6 7 8 9 10 11 | private void AddDates(string DateRFrom,string DateRTo){ panAddSeason.Controls.Add(new LiteralControl(ReturnDateText(DateRFrom, DateRTo))); DateCount++; } private string ReturnDateText(string DateRFrom,string DateRTo){ string DateText="<div id='Divider"+DateCount+"'><hr /><input name='DateFrom"+DateCount+"' type='text' id='DateFrom"+DateCount+"' value='"+DateRFrom+"' size='10'/>"; DateText+="<strong> to </strong><input name='DateTo"+DateCount+"' type='text' id='DateTo"+DateCount+"' value='"+DateRTo+"' size='10'/> (dd-mm-yyyy) </div>"; return DateText; } |
The following function determines what days to include in the calculation:-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | private bool IsDayChecked(int Day) { bool retval = false; switch (Day) { case 0: retval = chkDayIncludedSun.Checked; break; case 1: retval = chkDayIncludedMon.Checked; break; case 2: retval = chkDayIncludedTues.Checked; break; case 3: retval = chkDayIncludedWed.Checked; break; case 4: retval = chkDayIncludedThur.Checked; break; case 5: retval = chkDayIncludedFri.Checked; break; case 6: retval = chkDayIncludedSat.Checked; break; } return retval; } |
This calculation is especially useful in calculating seasons for accommodation booking engines.