From 65dc00cb9f24e2b693832e8575d09553f97dac48 Mon Sep 17 00:00:00 2001 From: honzapatCZ Date: Thu, 10 Sep 2026 13:33:17 +0200 Subject: [PATCH] Add DateTimeOffset support to range --- Models/DateTimeOffsetFrame.cs | 48 +++++++++++++++++++++++++++++++++++ Utils/Extensions.cs | 2 ++ 2 files changed, 50 insertions(+) create mode 100644 Models/DateTimeOffsetFrame.cs diff --git a/Models/DateTimeOffsetFrame.cs b/Models/DateTimeOffsetFrame.cs new file mode 100644 index 0000000..3825a99 --- /dev/null +++ b/Models/DateTimeOffsetFrame.cs @@ -0,0 +1,48 @@ +using System.Linq.Expressions; +using NejCommon.Utils; + +namespace NejCommon.Models; +public class DateTimeOffsetFrame : IEquatable +{ + public DateTimeOffsetFrame(){ + + } + public DateTimeOffsetFrame(DateTimeOffset fromDate, DateTimeOffset toDate) + { + FromDate = fromDate; + ToDate = toDate; + } + + public DateTimeOffset FromDate { get; set; } = DateTimeOffset.MinValue; + public DateTimeOffset ToDate { get; set; } = DateTimeOffset.MaxValue; + + public override string ToString() + { + var from = (FromDate == DateTimeOffset.MinValue) ? "" : ("-" + FromDate.ToString("yyyy-MM-dd")); + var to = (ToDate == DateTimeOffset.MaxValue) ? "" : ("-" + ToDate.ToString("yyyy-MM-dd")); + return $"{from}{to}"; + } + + public static Expression> Conditional(Expression> dateAcessor, DateTimeOffsetFrame frame) + { + return e => dateAcessor.Compile()(e) >= frame.FromDate && dateAcessor.Compile()(e) <= frame.ToDate; + } + + public DateOnlyFrame ToDateOnlyFrame() + { + return new DateOnlyFrame(FromDate.ToDateOnly(), ToDate.ToDateOnly()); + } + public bool Equals(DateTimeOffsetFrame? other) + { + if (other is null) return false; + return this.FromDate == other.FromDate && this.ToDate == other.ToDate; + } + public override int GetHashCode() + => HashCode.Combine(FromDate, ToDate); + + public static bool operator ==(DateTimeOffsetFrame? left, DateTimeOffsetFrame? right) + => left?.Equals(right) ?? right is null; + + public static bool operator !=(DateTimeOffsetFrame? left, DateTimeOffsetFrame? right) + => !(left?.Equals(right) ?? right is null); +} \ No newline at end of file diff --git a/Utils/Extensions.cs b/Utils/Extensions.cs index 703801f..d555716 100644 --- a/Utils/Extensions.cs +++ b/Utils/Extensions.cs @@ -106,6 +106,8 @@ public static class Extensions [Projectable] public static DateOnly ToDateOnly(this DateTime date) => DateOnly.FromDateTime(date); [Projectable] + public static DateOnly ToDateOnly(this DateTimeOffset date) => DateOnly.FromDateTime(date.DateTime); + [Projectable] public static DateTime ToDateTime(this DateOnly date) => new DateTime(date.Year, date.Month, date.Day); [Projectable] public static decimal Round(this decimal value, int decimals = 2) => Math.Round(value, decimals);