日期比较并显示从控制器到视图的唯一日期列表

我有一个日期列表,我想与另一组日期(我使用JS)进行比较。

鉴于范围;

Start Date: 11/1/2017 12:00:00 AM End Date: 11/20/2017 12:00:00 AM 

使用查询;

 var mod = (from m in lst where m.RId == EN && m.Date >= startDate && m.Date  dt.Date) .Select(z => z.OrderBy(y => y.Date).First()) .ToList(); var presRowCount = 0; //to get the count presRowCount = earlyMod.Count(); ViewBag.presRowCount = presRowCount; return View(earlyMod); 

在视图中;

  @foreach (var item in Model) {  @Html.DisplayFor(modelItem => item.RegisterationId)   @Html.DisplayFor(modelItem => item.DateTime) @ViewBag.Dates   @Html.DisplayFor(modelItem => item.Date)  ....} 

我在View中得到的是(让我们称之为presentDates );

 11/9/2017 8:02:09 AM 11/10/2017 11:23:04 AM 11/14/2017 10:11:11 AM 

我在视图中也有这个JS函数,它有另一组日期(不包括周末);

  var startDate = '@ViewBag.StartDate'; var endDate = '@ViewBag.EndDate'; startDate = new Date(startDate); endDate = new Date(endDate); var weekDay = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); while (startDate <= endDate) { var new_weekDay = startDate.getDay(); if (new_weekDay  0) { var month = startDate.getMonth() + 1; if (month <= 9) { month = "0" + month; } var day = startDate.getDate(); if (day <= 9) { day = "0" + day; } document.write(day + "/" + month + "/" + startDate.getFullYear() + " (" + weekDay[new_weekDay] + ")
"); console.log(day + "/" + month + "/" + startDate.getFullYear() + " (" + weekDay[new_weekDay] + ")
"); } startDate.setDate(startDate.getDate() + 1)

我从上面的JS函数得到的结果(我们称之为weekDates );

 01/11/2017 (Wednesday) 02/11/2017 (Thursday) 03/11/2017 (Friday) 06/11/2017 (Monday) 07/11/2017 (Tuesday) 08/11/2017 (Wednesday) 09/11/2017 (Thursday) 10/11/2017 (Friday) 13/11/2017 (Monday) 14/11/2017 (Tuesday) 15/11/2017 (Wednesday) 

我想要的是比较两组日期并仅显示两组中不存在的日期的方法(我们称之为absentDates = weekDates - presentDates );

 01/11/2017 (Wednesday) 02/11/2017 (Thursday) 03/11/2017 (Friday) 06/11/2017 (Monday) 07/11/2017 (Tuesday) 08/11/2017 (Wednesday) 13/11/2017 (Monday) 

注意:日期的格式也不同。

您的控制器负责将正确的数据发送到视图,因此您应该在控制器中构建“缺席”日期列表,而不是在javascript中。

构建startDateendDate之间的工作日列表,然后使用linq .Except()子句排除当前查询中包含的日期

 // Build list of weekdays List weekDays = new List(); int days = (endDate - startDate).Days; for(int i = 0; i < days; i++) { DateTime date = startDate.AddDays(i); if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) { continue; } weekDays.Add(date); } // Get the dates to be excluded IEnumerable excluded = earlyMod.Select(x => x.Date); // Get the absent dates IEnumerable absentDates = weekDays.Except(excluded); 

理想情况下,您应该使用包含当前查询返回的对象的属性的视图模型,以及IEnumerable AbsentDates属性,并将其传递给视图以使其强类型化(并删除所有ViewBag属性),但是你可以使用它将它传递给视图

 ViewBag.AbsentDates = absentDates; 

并在视图中使用foreach循环来显示它们。

注意如果你想要一个特定的显示格式,那么你可以使用.ToString("dd/MM/yyyy (dddd)")