using System; using Wino.Core.Domain.Models.Calendar; namespace Wino.Core.Domain.Extensions; public static class DateTimeExtensions { /// /// Returns a date range for the month of the given date. /// /// Date to get range for. public static DateRange GetMonthDateRangeStartingWeekday(this DateTime date, DayOfWeek WeekStartDay) { DateTime firstDayOfMonth = new DateTime(date.Year, date.Month, 1); int daysToSubtract = (7 + (firstDayOfMonth.DayOfWeek - WeekStartDay)) % 7; DateTime rangeStart = firstDayOfMonth.AddDays(-daysToSubtract); DateTime rangeEnd = rangeStart.AddDays(34); return new DateRange(rangeStart, rangeEnd); } public static DateTime GetWeekStartDateForDate(this DateTime date, DayOfWeek firstDayOfWeek) { // Detect the first day of the week that contains the selected date. int diff = (7 + (date.DayOfWeek - firstDayOfWeek)) % 7; // Start loading from this date instead of visible date. return date.AddDays(-diff).Date; } }