You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Connected.Components/Extensions/DateTimeExtensions.cs

49 lines
1.5 KiB

2 years ago
// Copyright (c) MudBlazor
using System;
using System.Globalization;
namespace Connected.Extensions
{
public static class DateTimeExtensions
{
public static string ToIsoDateString(this DateTime self)
{
return $"{self.Year:D4}-{self.Month:D2}-{self.Day:D2}";
}
public static string ToIsoDateString(this DateTime? self)
{
if (self == null)
return null;
return $"{self.Value.Year:D4}-{self.Value.Month:D2}-{self.Value.Day:D2}";
}
public static DateTime StartOfMonth(this DateTime self, CultureInfo culture)
{
var month = culture.Calendar.GetMonth(self);
var year = culture.Calendar.GetYear(self);
return culture.Calendar.ToDateTime(year, month, 1, 0, 0, 0, 0);
}
public static DateTime EndOfMonth(this DateTime self, CultureInfo culture)
{
var month = culture.Calendar.GetMonth(self);
var year = culture.Calendar.GetYear(self);
var days = culture.Calendar.GetDaysInMonth(year, month);
return culture.Calendar.ToDateTime(year, month, days, 0, 0, 0, 0);
}
public static DateTime StartOfWeek(this DateTime self, DayOfWeek firstDayOfWeek)
{
var diff = (7 + (self.DayOfWeek - firstDayOfWeek)) % 7;
if (self.Year == 1 && self.Month == 1 && (self.Day - diff) < 1)
{
return self.Date;
}
return self.AddDays(-1 * diff).Date;
}
}
}