Cristian Capannini
Cristian Capannini

Reputation: 110

Getting the list of days of the current week from DateTime.Now

My paradoxical or perhaps trivial problem is to create me a list of the days in format DD - MM - YY from the date of today. Suppose we have today as " 11/04/2015 ". I want to create a list of datetime that starts exactly from Monday, 02.11.2015 to Sunday, 08.11.2015. How is this possible?

I thought initially :

DateTime today = new DateTime.Now;

int posDayOfWeek = (int)today.DayOfWeek;

if (posDayOfWeek < 7 && posDayOfWeek > 1)
{
    // And from there a black hole in my brain ....
}

How can I accomplish this?

Upvotes: 5

Views: 16885

Answers (4)

Simone S.
Simone S.

Reputation: 1916

Easy way:

Enumerable.Range(0, 7).Select(x => (DayOfWeek)x).ToList()

Upvotes: 1

user2023861
user2023861

Reputation: 8208

Just use this:

DayOfWeek[] days = { 
    DayOfWeek.Sunday, 
    DayOfWeek.Monday, 
    DayOfWeek.Tuesday, 
    DayOfWeek.Wednesday, 
    DayOfWeek.Thursday, 
    DayOfWeek.Friday, 
    DayOfWeek.Saturday };

It's simple. It's clear. And I've already typed it out for you.

Upvotes: 2

LionDog823
LionDog823

Reputation: 1

Searching the web for something similar, I found this question/answer thread and expanded to create a sort order based on day of the week starting with yesterday:

//create a sort order that starts yesterday
DateTime orderStartDate = DateTime.Today.AddDays(-1);
List<int> sortOrder = Enumerable.Range(0,7).Select(days => (int)orderStartDate.AddDays(days).DayOfWeek).ToList();

//sort collection using the index of the sortOrder
collection.AddRange(list.OrderBy(list  => sortOrder.FindIndex(days => day == list.TargetDay)));

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1499790

Assuming you always want Monday to Sunday, you just need something like:

DateTime today = DateTime.Today;
int currentDayOfWeek = (int) today.DayOfWeek;
DateTime sunday = today.AddDays(-currentDayOfWeek);
DateTime monday = sunday.AddDays(1);
// If we started on Sunday, we should actually have gone *back*
// 6 days instead of forward 1...
if (currentDayOfWeek == 0)
{
    monday = monday.AddDays(-7);
}
var dates = Enumerable.Range(0, 7).Select(days => monday.AddDays(days)).ToList();

Upvotes: 15

Related Questions