I need to get the date of the first and last day of the week knowing the week number.
I get a start date and an end date, representing the first and last day of a s
You can use following two methods to calculate the week-number and the start-date of a given weeknumber according to a given year:
// this method is borrowed from http://stackoverflow.com/a/11155102/284240
public static int GetIso8601WeekOfYear(DateTime time)
{
DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
{
time = time.AddDays(3);
}
return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}
public static DateTime FirstDateOfWeek(int year, int weekOfYear, System.Globalization.CultureInfo ci)
{
DateTime jan1 = new DateTime(year, 1, 1);
int daysOffset = (int)ci.DateTimeFormat.FirstDayOfWeek - (int)jan1.DayOfWeek;
DateTime firstWeekDay = jan1.AddDays(daysOffset);
int firstWeek = ci.Calendar.GetWeekOfYear(jan1, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek);
if ((firstWeek <= 1 || firstWeek >= 52) && daysOffset >= -3)
{
weekOfYear -= 1;
}
return firstWeekDay.AddDays(weekOfYear * 7);
}
Then you can get both dates in the following way:
// 46
int thisWeekNumber = GetIso8601WeekOfYear(DateTime.Today);
// 11/11/2013
DateTime firstDayOfWeek= FirstDateOfWeek(2013, thisWeekNumber, CultureInfo.CurrentCulture);
// 11/12/2012
DateTime firstDayOfLastYearWeek = FirstDateOfWeek(2012, thisWeekNumber, CultureInfo.CurrentCulture);
Add 6 days to get the end of the week.
You can find the solution for how to get the first and last date of the current or last week as per the passed argument date and now you can also get the date of the first day and last day of the same week of the previous year.
You can also change some settings to change your first weekday to get results as your need.
Suppose your weekday starts from Monday except for Sunday, so what you need to do is that just change the switch cases and go on to get your desired result.
public DateTime GetFirstDateOfCurrentWeek(DateTime dtDate)
{
//In this function we assumed that week start from sunday and end on saturday
int no = 0;
switch (dtDate.DayOfWeek.ToString())
{
case "Sunday":
no = 0;
break;
case "Monday":
no = 1;
break;
case "Tuesday":
no = 2;
break;
case "Wednesday":
no = 3;
break;
case "Thursday":
no = 4;
break;
case "Friday":
no = 5;
break;
case "Saturday":
no = 6;
break;
default:
no = 0;
break;
}
return dtDate.AddDays(-no);
}
public DateTime GetLastDateOfCurrentWeek(DateTime dtDate)
{
int no = 0;
switch (dtDate.DayOfWeek.ToString())
{
case "Saturday":
no = 0;
break;
case "Friday":
no = 1;
break;
case "Thursday":
no = 2;
break;
case "Wednesday":
no = 3;
break;
case "Tuesday":
no = 4;
break;
case "Monday":
no = 5;
break;
case "Sunday":
no = 6;
break;
default:
no = 0;
break;
}
return dtDate.AddDays(no);
}
public DateTime GetFirstDateOfLastWeek(DateTime dtDate)
{
return GetFirstDateOfCurrentWeek(dtDate).AddDays(-7);
}
public DateTime GetLastDateOfLastWeek(DateTime dtDate)
{
return GetLastDateOfCurrentWeek(dtDate).AddDays(-7);
}
public DateTime GetFirstDateOfCurrentWeekOfPrvYear(DateTime dtDate)
{
int dayOfYear = dtDate.DayOfYear;
DateTime firstDateOfThisYear = (Convert.ToDateTime("01/01/" + dtDate.Year.ToString()));
DateTime firstDateofPrvYear = (firstDateOfThisYear.AddYears(-1));
DateTime dateOfPrvYear = (firstDateofPrvYear.AddDays(dayOfYear));
return GetFirstDateOfCurrentWeek(dateOfPrvYear);
}
public DateTime GetLastDateOfCurrentWeekOfPrvYear(DateTime dtDate)
{
int dayOfYear = dtDate.DayOfYear;
DateTime firstDateOfThisYear = Convert.ToDateTime("01/01/" + dtDate.Year.ToString());
DateTime firstDateofPrvYear = (firstDateOfThisYear.AddYears(-1));
DateTime dateOfPrvYear = (firstDateofPrvYear.AddDays(dayOfYear));
return GetLastDateOfCurrentWeek(dateOfPrvYear);
}
DateTime dt = Convert.ToDateTime("12/12/2019");
int dayOfYear = dt.DayOfYear; string weekOfYear = (dt.DayOfYear / 7).ToString(); string firstDateOfThisYear = (Convert.ToDateTime("01/01/" + dt.Year.ToString())).ToShortDateString(); string firstDateofPrvYear = (Convert.ToDateTime(firstDateOfThisYear).AddYears(-1)).ToShortDateString(); string dateOfPrvYear = (Convert.ToDateTime(firstDateofPrvYear).AddDays(dayOfYear)).ToShortDateString(); string firstDateofWeekPrvYear = GetFirstDateOfCurrentWeek(Convert.ToDateTime(dateOfPrvYear)).ToShortDateString(); string lastDateofWeekPrvYear = GetLastDateOfCurrentWeek(Convert.ToDateTime(dateOfPrvYear)).ToShortDateString(); string weekOfPrvYear = (Convert.ToDateTime(dateOfPrvYear).DayOfYear / 7).ToString(); MessageBox.Show("Day of Year: " + dayOfYear.ToString()); MessageBox.Show("Week of Year: " + weekOfYear); MessageBox.Show("First day of this year: " + firstDateOfThisYear); MessageBox.Show("First day of prv year: " + firstDateofPrvYear); MessageBox.Show("Date of Prv Year: " + dateOfPrvYear); MessageBox.Show("First Date of Week Prv Year: " + firstDateofWeekPrvYear); MessageBox.Show("Last Date of Week Prv Year: " + lastDateofWeekPrvYear); MessageBox.Show("Day of Prv Year: " + weekOfPrvYear.ToString());