using Newtonsoft.Json.Linq;
public static void Main()
JObject jEvent = new JObject();
JObject jRepeat = new JObject();
DateTime zeroTime = new DateTime(1, 1, 1);
EndRepeatType EndRepeatType = EndRepeatType.Repetitions;
DateTime dFrom = new DateTime(2015,12,31);
Console.WriteLine("dFrom - " +dFrom.ToString());
DateTime MaxRepeatDateParse =new DateTime(2016,1,10);
string[] RepeatDays =new string[] {"Sun","Mon"};
Console.WriteLine("RepeatDays - " +String.Join(",",RepeatDays));
int DayOfWeek = ((int)dFrom.DayOfWeek == 0) ? 1 : (int)dFrom.DayOfWeek +1;
Console.WriteLine("DayOfWeek - " +DayOfWeek.ToString());
int daysToAdd = DayOfWeek==7 ? 0 :7 - DayOfWeek;
Console.WriteLine("daysToAdd - " +daysToAdd.ToString());
DateTime StartDate = dFrom.AddDays(daysToAdd + 1) ;
Console.WriteLine("StartDate - " +StartDate.ToString());
if (EndRepeatType == EndRepeatType.Repetitions && Repetitions > 0 )
MaxRepeatDateParse = (StartDate).AddDays ( (Repetitions * 7) );
Console.WriteLine("MaxRepeatDateParse - " +MaxRepeatDateParse.ToString());
double TotalYears = (MaxRepeatDateParse - dFrom).TotalDays / 365;
MaxRepeatDateParse = dFrom.AddYears ( 2 );
double TotalDaysAllowed = (MaxRepeatDateParse - StartDate).TotalDays;
Console.WriteLine("TotalDaysAllowed - " +TotalDaysAllowed.ToString());
double TotalRepetitionsAllowed = TotalDaysAllowed / 7;
Console.WriteLine("TotalRepetitionsAllowed - " +TotalRepetitionsAllowed.ToString());
double FullWeeksRepetitions = (Int32) TotalRepetitionsAllowed;
Console.WriteLine("FullWeeksRepetitions - " +FullWeeksRepetitions.ToString());
DateTime currentWeekFirstDate = StartDate;
Console.WriteLine("---------------------- currentWeekFirstDate ------ " +currentWeekFirstDate.ToString());
DateTime CurrentStartDate = DateTime.MinValue;
for ( Int32 i = 0 ; i < FullWeeksRepetitions ; i += Step )
currentWeekFirstDate = StartDate.AddDays ( i * 7 );
Console.WriteLine(" ----------------- Week Start At --------------- " + currentWeekFirstDate);
for (Int32 d =0; d < 7; d++)
CurrentStartDate = currentWeekFirstDate.AddDays(d);
var currentDayOfWeek =CurrentStartDate.DayOfWeek.ToString().Substring(0,3);
foreach (string day in RepeatDays)
if(day.ToString().Contains(currentDayOfWeek))
Console.WriteLine("Add to calendar - " +day+ " - " +CurrentStartDate.ToString());
if(EndRepeatType == EndRepeatType.Date ){
Console.WriteLine("----------------------Last week check---------------" + CurrentStartDate.ToString());
int DayOfLastWeek = ((int)MaxRepeatDateParse.DayOfWeek == 0) ? 1 : (int)MaxRepeatDateParse.DayOfWeek;
Console.WriteLine("DayOfLastWeek - " +DayOfLastWeek.ToString());
int LastdaysToAdd = DayOfLastWeek==7 ? 0 :7 - DayOfLastWeek;
Console.WriteLine("LastdaysToAdd - " +LastdaysToAdd.ToString());
for ( Int32 d = 0 ; d < LastdaysToAdd ; d++ )
CurrentStartDate = CurrentStartDate.AddDays(d);
var currentDayOfWeek =CurrentStartDate.DayOfWeek.ToString().Substring(0,3);
foreach ( string day in RepeatDays )
if(day.ToString().ToLower().Contains(currentDayOfWeek.ToString().ToLower()))
Console.WriteLine("Add to calendar - " +day+ " - " +CurrentStartDate.ToString());
internal JObject RepeatEventsDataBuild ( JObject jRepeat , JObject jData )
JObject rv = new JObject();
public enum FrequencyType
public enum EndRepeatType