public void ToString_DateRangeFacet() { var term = new DateRangeFacet { Field = "fieldName", Name = "myDateFacet", Size = 2, }.AddRanges( new Range <DateTime> { Name = "old", End = new DateTime(2016, 01, 01) }, new Range <DateTime> { Name = "thisYear", Start = new DateTime(2016, 01, 01, 0, 0, 1) }, new Range <DateTime> { Name = "theYear2011", Start = new DateTime(2011, 01, 01), End = new DateTime(2011, 12, 31, 23, 59, 59) }); var expected = "\"myDateFacet\":{\"field\":\"fieldName\",\"size\":2,\"date_ranges\":" + "[{\"name\":\"old\",\"end\":\"2016-01-01T00:00:00\"}," + "{\"name\":\"thisYear\",\"start\":\"2016-01-01T00:00:01\"}," + "{\"name\":\"theYear2011\",\"start\":\"2011-01-01T00:00:00\",\"end\":\"2011-12-31T23:59:59\"}]}"; var actual = term.ToString().Replace(Environment.NewLine, string.Empty).Replace(" ", string.Empty); Assert.Equal(expected, actual); }
/// <summary> /// /// </summary> /// <param name="dateFacetBlock"></param> /// <param name="order"></param> /// <returns></returns> private static DateRangeFacet ProcessDateFacetBlock(DateRangeFacetBlock dateFacetBlock, int order) { var dateFacet = new DateRangeFacet(dateFacetBlock.FieldName, dateFacetBlock.Label) { Order = order, }; dateFacet.Ranges = new List <DateRange>(); var now = DateTime.Today; var startYear = now.Year; var gapStrs = new List <string>(); if (!string.IsNullOrEmpty(dateFacetBlock.RangeGap)) { var sep = dateFacetBlock.RangeGap.Contains((',')) ? ',' : ' '; gapStrs = dateFacetBlock.RangeGap.Split(sep).ToList(); } foreach (var gap in gapStrs) { var match = Regex.Match(gap, @"(\d*)(\w)"); if (!match.Success) { continue; } var range = TypeParser.ParseInt(match.Groups[1].ToString()); var dateType = match.Groups[2].ToString(); DateTime start, start2; DateTime end, end2; string label, label2; switch (dateType) { case "D": start = now.AddDays(-range); end = now.AddDays((1)); label = string.Format("Last {0} days", range); start2 = now.AddDays(1); end2 = start2.AddDays((range)); label2 = string.Format("Next {0} days", range); break; case "M": start = new DateTime(now.Year, now.Month, 1).AddMonths(-range); end = now; label = string.Format("Last {0} Months", range); start2 = now.AddDays(1); end2 = new DateTime(now.Year, now.Month, 1).AddMonths(range); label2 = string.Format("Next {0} Months", range); break; default: start = new DateTime(startYear, 1, 1).AddYears(-(range - 1)); end = new DateTime(startYear, 12, 31); label = string.Format("Last {0} Years", range); end2 = new DateTime(startYear, 1, 1).AddYears((range - 1)); start2 = new DateTime(startYear, 12, 31); label2 = string.Format("Next {0} Years", range); startYear = startYear - 1; break; } dateFacet.Ranges.Add(new DateRange() { Lower = start.Date, Upper = end.Date, Label = label, }); dateFacet.Ranges.Add(new DateRange() { Lower = start2.Date, Upper = end2.Date, Label = label2, }); } // start generating years from startyear plus max range and count backwards startYear = startYear + dateFacetBlock.MaxRange; var rangeEnd = dateFacetBlock.MaxRange * 2 - 1; for (var i = 0; i < rangeEnd; i++) { dateFacet.Ranges.Add(new DateRange() { Lower = new DateTime(startYear, 1, 1), Upper = new DateTime(startYear, 12, 31), Label = string.Format("{0}", startYear), }); startYear = startYear - 1; } if (dateFacetBlock.MaxRange > 0) { dateFacet.Ranges.Add(new DateRange() { Lower = null, Upper = new DateTime(startYear, 12, 31), //Label = string.Format("{0} or before", startYear), }); } return(dateFacet); }