Files
Wino-Mail/Wino.Core.Domain/Models/Calendar/DateRange.cs
Burak Kaan Köse d1d6f12f05 Ground work for Wino Calendar. (#475)
Wino Calendar abstractions.
2024-11-10 23:28:25 +01:00

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;
}
}
}