02 Feb 2019
Getting the first and last day of a week or month with C#
I recently found myself needing to get the date of the first day of a particular week in C#. After browsing this rather confusing collection of answers, I pieced together parts of various code snippets into this little collection of utility methods.
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 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);
}
The FirstDayOfWeek
method is culture-sensitive, so in the en-GB
culture the first day will be a Monday, whereas in the en-US
culture it will be a Sunday. Given that, you can now easily get month and week boundaries for any given DateTime
:
var firstdayOfThisWeek = DateTime.Now.FirstDayOfWeek();
Hopefully someone else out there will find these useful!
Originally published on 02 Feb 2015; updated on 02 Feb 2019
Questions or comments? Get in touch @markeebee, or email [Turn On Javascript To View Email Address].
More articles
© Mark Ashley Bell 2023