namespace AZKiServer.Utilz; public enum DateInterval { Daily, Weekly, Monthly, Yearly, All, } public static class DateUtils { public static TimeSpan ToUnixTime(this DateTime date) { return date - DateTime.UnixEpoch; } public static DateTime SnapToYear(this DateTime date) { return new DateTime(date.Year, 1, 1, 0, 0, 0, date.Kind); } public static DateTimeOffset SnapToYear(this DateTimeOffset date) { return new DateTimeOffset(date.Year, 1, 1, 0, 0, 0, date.Offset); } public static DateTime SnapToMonth(this DateTime date) { return new DateTime(date.Year, date.Month, 1, 0, 0, 0, date.Kind); } public static DateTimeOffset SnapToMonth(this DateTimeOffset date) { return new DateTimeOffset(date.Year, date.Month, 1, 0, 0, 0, date.Offset); } public static DateTime SnapToWeek(this DateTime date) { var d = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0, date.Kind); if (date.DayOfWeek == DayOfWeek.Sunday) return d; else return d.AddDays(-(int)date.DayOfWeek); } public static DateTimeOffset SnapToWeek(this DateTimeOffset date) { var d = new DateTimeOffset(date.Year, date.Month, date.Day, 0, 0, 0, date.Offset); if (date.DayOfWeek == DayOfWeek.Sunday) return d; else return d.AddDays(-(int)date.DayOfWeek); } public static (DateTime from, DateTime to) ToInterval(this DateTime date, DateInterval internval) { return internval switch { DateInterval.Daily => (date, date.AddDays(1)), DateInterval.Weekly => (date, date.AddDays(7)), DateInterval.Monthly => (date, date.AddMonths(1)), DateInterval.Yearly => (date, date.AddYears(1)), DateInterval.All => (DateTime.MinValue, DateTime.MaxValue), _ => throw new InvalidOperationException(), }; } public static (DateTimeOffset from, DateTimeOffset to) ToInterval(this DateTimeOffset date, DateInterval internval) { return internval switch { DateInterval.Daily => (date, date.AddDays(1)), DateInterval.Weekly => (date, date.AddDays(7)), DateInterval.Monthly => (date, date.AddMonths(1)), DateInterval.Yearly => (date, date.AddYears(1)), DateInterval.All => (DateTime.MinValue, DateTime.MaxValue), _ => throw new InvalidOperationException(), }; } public static TimeSpan Days(this int days) => TimeSpan.FromDays(days); public static TimeSpan Days(this float days) => TimeSpan.FromDays(days); public static TimeSpan Hours(this int hours) => TimeSpan.FromHours(hours); public static TimeSpan Hours(this float hours) => TimeSpan.FromHours(hours); public static TimeSpan Minutes(this int minutes) => TimeSpan.FromMinutes(minutes); public static TimeSpan Minutes(this float minutes) => TimeSpan.FromMinutes(minutes); public static TimeSpan Seconds(this int seconds) => TimeSpan.FromSeconds(seconds); public static TimeSpan Seconds(this float seconds) => TimeSpan.FromSeconds(seconds); public static TimeSpan Miliseconds(this int miliseconds) => TimeSpan.FromMilliseconds(miliseconds); public static TimeSpan Miliseconds(this float miliseconds) => TimeSpan.FromMilliseconds(miliseconds); }