namespace EgwCoreLib.Utils { public class DtUtils { #region Public Enums public enum PeriodSet { Select = 0, Today, Yesterday, LastMonth, LastTrim, LastWeek, LastYear, ThisMonth, ThisTrim, ThisWeek, ThisYear } #endregion Public Enums #region Public Classes public class Periodo { #region Public Constructors public Periodo() { } public Periodo(DateTime inizio, DateTime fine) { this.Inizio = inizio; this.Fine = fine; } public Periodo(PeriodSet tipo) { int endMonth = 0; DateTime oggi = DateTime.Today; switch (tipo) { case DtUtils.PeriodSet.Today: this.Inizio = oggi; this.Fine = oggi.AddDays(1); break; case DtUtils.PeriodSet.Yesterday: this.Inizio = oggi.AddDays(-1); this.Fine = oggi; break; case DtUtils.PeriodSet.LastMonth: this.Inizio = new DateTime(oggi.Year, oggi.Month, 1).AddMonths(-1); this.Fine = new DateTime(oggi.Year, oggi.Month, 1); break; case DtUtils.PeriodSet.LastTrim: // calcolo trimestre da mese... endMonth = (int)Math.Ceiling((float)oggi.Month / 3) * 3; this.Fine = new DateTime(oggi.Year, endMonth, 1).AddMonths(-2); this.Inizio = this.Fine.AddMonths(-3); break; case DtUtils.PeriodSet.LastYear: this.Fine = new DateTime(oggi.Year, 1, 1); this.Inizio = this.Fine.AddYears(-1); break; case DtUtils.PeriodSet.LastWeek: this.Inizio = oggi.StartOfWeek(DayOfWeek.Monday).AddDays(-7); this.Fine = this.Inizio.AddDays(7); break; case DtUtils.PeriodSet.ThisMonth: this.Inizio = new DateTime(oggi.Year, oggi.Month, 1); this.Fine = this.Inizio.AddMonths(1); break; case DtUtils.PeriodSet.ThisTrim: // calcolo trimestre da mese... endMonth = (int)Math.Ceiling((float)oggi.Month / 3) * 3; this.Fine = new DateTime(oggi.Year, endMonth, 1).AddMonths(1); this.Inizio = this.Fine.AddMonths(-3); break; case DtUtils.PeriodSet.ThisWeek: this.Inizio = oggi.StartOfWeek(DayOfWeek.Monday); this.Fine = this.Inizio.AddDays(7); break; case DtUtils.PeriodSet.ThisYear: this.Inizio = new DateTime(oggi.Year, 1, 1); this.Fine = this.Inizio.AddYears(1); break; case DtUtils.PeriodSet.Select: default: break; } } #endregion Public Constructors #region Public Properties public DateTime Fine { get; set; } = DateTime.Today.AddDays(+1); public DateTime Inizio { get; set; } = DateTime.Today; #endregion Public Properties #region Public Methods public Periodo Clone() { return new Periodo(this.Inizio, this.Fine); } public override bool Equals(object? obj) { if (obj == null) return false; if (!(obj is Periodo item)) return false; if (Inizio != item.Inizio) return false; if (Fine != item.Fine) return false; return true; } public override int GetHashCode() { return base.GetHashCode(); } #endregion Public Methods } #endregion Public Classes } }