Расчитать текущую неделю по одной дате календаря
выбирая дату на календаре, необходимо показать текущую неделю. (условно пользователь может выбрать среду => показываем с понедельника по субботу)
мне удалось расчитать понедельник (формулу нашла пока искала решение), а вот как найти субботу, чтоб получить текущую неделю (рабочую)
DateTime test = someValue;
var test2 = someValue2;
//как видно вар лучше смотрится....чтоб визуально дистангировать переменные
public void SomeMethode()
{
..............................
var currentMonday = DateValue?.AddDays(-(((int)DateValue?.DayOfWeek + 6) % 7)); //✅
var currentSaturd = DateValue?.AddDays(+(((int)DateValue?.DayOfWeek - 6) % 7)); //❌
...................
//я подумала просто поменяю наоборот...
}
DateValue = это дата выбранная пользователем на календаре.
Ответы (2 шт):
Автор решения: Dev18
→ Ссылка
var currentMonday = DateValue?.AddDays(-(((int)DateValue?.DayOfWeek + 6) % 7));
var currentSaturd = currentMonday?.AddDays(5);
вот еще может кому пригодится такое интересное решение, //там и другие расчеты дат
public static partial class DateTimeExtensions
{
public static DateTime FirstDayOfWeek(this DateTime dt)
{
var culture = System.Threading.Thread.CurrentThread.CurrentCulture;
var diff = dt.DayOfWeek - culture.DateTimeFormat.FirstDayOfWeek;
if (diff < 0)
{
diff += 7;
}
return dt.AddDays(-diff).Date;
}
public static DateTime LastDayOfWeek(this DateTime dt) =>
dt.FirstDayOfWeek().AddDays(6);
public static DateTime LastSaturdayOfWeek(this DateTime dt) =>
dt.FirstDayOfWeek().AddDays(5);
public static DateTime FirstDayOfMonth(this DateTime dt) =>
new DateTime(dt.Year, dt.Month, 1);
public static DateTime LastDayOfMonth(this DateTime dt) =>
dt.FirstDayOfMonth().AddMonths(1).AddDays(-1);
public static DateTime FirstDayOfNextMonth(this DateTime dt) =>
dt.FirstDayOfMonth().AddMonths(1);
}
Автор решения: EvgeniyZ
→ Ссылка
Такое лучше привязывать к культуре, ибо у разных стран есть свои особенности.
Что-то вроде этого:
var dateValue = DateTime.Today; // Текущая дата без времени
var culture = CultureInfo.CurrentCulture; // Текущая культура
var weekOffset = culture.DateTimeFormat.FirstDayOfWeek - dateValue.DayOfWeek; // Разница между началом недели, и текущим днем.
var startOfWeek = dateValue.AddDays(weekOffset); // Получаем дату начала недели указанной даты
Имея это уже можем делать что хотим, например, получить все даты текущей недели:
var weekDays = Enumerable.Range(0, 7).Select(i => startOfWeek.AddDays(i)); // На 26 мая (Россия) выдаст с 22 по 28 включительно.