using System.Collections.Generic;
using System.Collections;
public static void Main()
startDate: '2018-1-01T00:00:00',
endDate: '2020-8-29T00:00:00',
startDate: '2018-1-01T00:00:00',
endDate: '2020-8-29T00:00:00',
startDate: '2018-9-01T00:00:00',
endDate: '2020-8-29T00:00:00',
List<Orgnization> OrgInput = JsonConvert.DeserializeObject<List<Orgnization>>(inputJSON);
YearCal yC = new YearCal();
List<OrgnizationOut> OrgOutput = yC.CalculateYears(OrgInput);
string result = JsonConvert.SerializeObject(OrgOutput);
public List<OrgnizationOut> CalculateYears(List<Orgnization> OrgInput)
List<OrgnizationOut> OrgOutput = new List<OrgnizationOut>();
foreach(Orgnization org in OrgInput)
OrgOutput.Add(new OrgnizationOut
calendarYears = getCalendarYears(org.startDate.Year,org.endDate.Year),
fiscalYears = getFisicalYears(org.startDate,org.endDate,org.fiscalYearEnd)
private int[] getCalendarYears(int startYear, int endYear)
List<int> years = new List<int>();
for(int year = startYear; year <= endYear; year++)
private int[] getFisicalYears(DateTime startDate, DateTime endDate, int fiscalYearEnd)
List<int> years = new List<int>();
DateTime fStartDate = new DateTime(startDate.Year, fiscalYearEnd, 1);
DateTime fEndDate = new DateTime(endDate.Year, fiscalYearEnd == 12 ? 12 : fiscalYearEnd+1 , 1).AddDays(-1);
int numberOfYears = endDate.Year - startDate.Year + 1;
for(int iteration = 0; iteration <= numberOfYears; iteration++)
if((startDate <= fStartDate))
years.Add(startDate.Year);
else if(iteration >= numberOfYears)
if((endDate >= fEndDate))
years.Add(startDate.Year + iteration);
years.Add(startDate.Year + iteration);
public int orgId {get;set;}
public DateTime startDate {get;set;}
public DateTime endDate {get;set;}
public int fiscalYearEnd {get;set;}
public class OrgnizationOut
public int orgId {get;set;}
public int[] calendarYears {get;set;}
public int[] fiscalYears {get;set;}