Я пытаюсь получить начало недели с определенной даты. Например, если я передал DateTime 16/08/2018, я бы ожидал возвращения 13/08/2018. Все, что я нашел, - это найти начало текущей недели.

-3
Stuart Bradley 20 Авг 2018 в 13:02

4 ответа

Лучший ответ

Я бы сделал что-то вроде этого:

Разобрать дату от строки до объекта DateTime (если требуется)

Добавить дни текущего дня недели * -1 (превратить в минус) + 1

string s = "2018-08-23 13:26";

DateTime dt = DateTime.ParseExact(s, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

DateTime startOfWeek = dt.AddDays(((int)(dt.DayOfWeek) * -1) + 1);
Console.WriteLine(startOfWeek);

Вот скрипка


Изменить: Если вас беспокоит, что воскресенье наступит в следующий понедельник, то измените воскресенье, чтобы убрать 7 дней из текущей даты следующим образом;

string s = "2018-08-17 13:26";

DateTime dt = DateTime.ParseExact(s, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

bool isSunday = dt.DayOfWeek == 0;
var dayOfweek = isSunday == false ? (int)dt.DayOfWeek : 7;

DateTime startOfWeek = dt.AddDays(((int)(dayOfweek) * -1) + 1);
Console.WriteLine(startOfWeek);
0
Adriani6 20 Авг 2018 в 10:33

Получить понедельник и воскресенье недели с переменной даты. Можно легко попробовать с переменной даты.

DateTime date = new DateTime(2019, 12, 1);
int day = (int) date.DayOfWeek;
DateTime Monday = date.AddDays((-1) * (day == 0 ? 6 : day - 1));
DateTime Sunday = date.AddDays((1) * (day== 0 ? day : 7 - day)); ```
1
Ralentix 9 Янв 2020 в 14:03

Вот версия дает вам понедельник недели (предполагается, что недели начинаются в понедельник и заканчиваются в воскресенье)

DateTime dt = DateTime.Now;
DateTime startOfWeek = dt.AddDays((((int)(dt.DayOfWeek) + 6) % 7) * -1);    
Console.WriteLine(startOfWeek);
0
Hans Kilian 20 Авг 2018 в 10:38

Супер просто! Вы можете использовать DayOfWeek, чтобы узнать, как далеко вы должны уйти. Дополнительная информация доступна здесь

Воскресенье - 0, понедельник - 1.

DateTime date = DateTime.Now; //gets current time
int day = date.DayOfWeek; //gets current day
DateTime Sunday = date.AddDays( (-1) * day ); //go back all the days to get to Sunday
DateTime Monday = date.AddDays( (-1) * (day - 1) ); //go back all the days - 1 to get to Monday

Как отмечено в комментарии, это не работает, если текущий день в воскресенье ... Итак, исправление в понедельник:

DateTime Monday = date.AddDays( (-1) * (day == 0 ? 7 : day - 1) ); //go back all the days - 1 to get to Monday
0
DaMachk 20 Авг 2018 в 11:01
51928335