public static IEnumerable <string> ConvertToNames(this DateTime[] periods, TimelogsPeriod period, DateTime current) { if (period == TimelogsPeriod.Daily) { return(periods.Select(p => p.ToString("dd/MM/yy"))); } if (period == TimelogsPeriod.Weekly) { if (periods.Last() > current.Date) { throw new ArgumentException("Current date should be greate or equal to the ending period.", "current"); } var weeks = new List <string>(); for (var i = 0; i <= periods.Length - 2; i++) { var w1 = periods[i]; var w2 = periods[i + 1].AddSeconds(-1); AddWeekName(weeks, w1, w2); } AddWeekName(weeks, periods.Last(), current.Date); return(weeks); } if (period == TimelogsPeriod.Monthly) { return(periods.Select(GetMonthName)); } throw new NotSupportedException(); }
public static DateTime[] GetPeriods(DateTime current, TimelogsPeriod period, int numberOfPeriods = 9) { if (numberOfPeriods == 0) { return new DateTime[] { } } ; if (period == TimelogsPeriod.Daily) { var datePoints = new List <DateTime>(); for (var i = numberOfPeriods - 1; i >= 1; i--) { datePoints.Add(current.AddDays(-i).Date); } datePoints.Add(current); return(datePoints.ToArray()); } if (period == TimelogsPeriod.Weekly) { var datePoints = new List <DateTime>(); var weekStartingDate = GetWeekStart(current); for (var i = numberOfPeriods - 1; i >= 1; i--) { datePoints.Add(weekStartingDate.AddDays(-7 * i)); } datePoints.Add(weekStartingDate); return(datePoints.ToArray()); } if (period == TimelogsPeriod.Monthly) { var datePoints = new List <DateTime>(); var monthStartingDate = new DateTime(current.Year, current.Month, 1); for (var i = numberOfPeriods - 1; i >= 0; i--) { datePoints.Add(monthStartingDate.AddMonths(-i)); } return(datePoints.ToArray()); } return(new DateTime[] { }); }