43 lines
1.3 KiB
C#
43 lines
1.3 KiB
C#
using System;
|
|
using System.Linq;
|
|
|
|
namespace Wino.Core.Domain.Models.Calendar
|
|
{
|
|
public class DateRange
|
|
{
|
|
public DateRange(DateTime startDate, DateTime endDate)
|
|
{
|
|
StartDate = startDate;
|
|
EndDate = endDate;
|
|
}
|
|
|
|
public DateTime StartDate { get; }
|
|
public DateTime EndDate { get; }
|
|
|
|
public int TotalDays => (EndDate - StartDate).Days;
|
|
|
|
public override string ToString() => $"{StartDate.ToString("dd MMMM")} - {EndDate.ToString("dd MMMM")}";
|
|
|
|
public bool IsInRange(DateTime date)
|
|
{
|
|
return date >= StartDate && date <= EndDate;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the most visible month index in the visible date range.
|
|
/// </summary>
|
|
public int GetMostVisibleMonthIndex()
|
|
{
|
|
var dateRange = Enumerable.Range(0, (EndDate - StartDate).Days + 1).Select(offset => StartDate.AddDays(offset));
|
|
|
|
var groupedByMonth = dateRange.GroupBy(date => date.Month)
|
|
.Select(g => new { Month = g.Key, DayCount = g.Count() });
|
|
|
|
// Find the month with the maximum count of days
|
|
var mostVisibleMonth = groupedByMonth.OrderByDescending(g => g.DayCount).FirstOrDefault();
|
|
|
|
return mostVisibleMonth?.Month ?? -1;
|
|
}
|
|
}
|
|
}
|