| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- using System;
- namespace Abp.Timing
- {
- /// <summary>
- /// A basic implementation of <see cref="IDateTimeRange"/> to store a date range.
- /// </summary>
- [Serializable]
- public class DateTimeRange : IDateTimeRange
- {
- /// <summary>
- /// Start time of the datetime range.
- /// </summary>
- public DateTime StartTime { get; set; }
- /// <summary>
- /// End time of the datetime range.
- /// </summary>
- public DateTime EndTime { get; set; }
- /// <summary>
- /// Gets the time span of the datetime range.
- /// When set, EndTime is recalculated
- /// </summary>
- public TimeSpan TimeSpan
- {
- get => EndTime - StartTime;
- set => EndTime = StartTime.Add(value);
- }
- private static DateTime Now => Clock.Now;
- /// <summary>
- /// Creates a new <see cref="DateTimeRange"/> object.
- /// </summary>
- public DateTimeRange()
- {
- }
- /// <summary>
- /// Creates a new <see cref="DateTimeRange"/> object from the given <paramref name="startTime"/> and <paramref name="endTime"/>.
- /// </summary>
- /// <param name="startTime">Start time of the datetime range</param>
- /// <param name="endTime">End time of the datetime range</param>
- public DateTimeRange(DateTime startTime, DateTime endTime)
- {
- StartTime = startTime;
- EndTime = endTime;
- }
- /// <summary>
- /// Creates a new <see cref="DateTimeRange"/> object from the given <paramref name="startTime"/> and <paramref name="timeSpan"/>.
- /// </summary>
- /// <param name="startTime">Start time of the datetime range</param>
- /// <param name="timeSpan">The span of time to calculate the EndTime</param>
- public DateTimeRange(DateTime startTime, TimeSpan timeSpan)
- {
- StartTime = startTime;
- TimeSpan = timeSpan;
- }
- /// <summary>
- /// Creates a new <see cref="DateTimeRange"/> object from given the <paramref name="dateTimeRange"/> object.
- /// </summary>
- /// <param name="dateTimeRange">IDateTimeRange object</param>
- public DateTimeRange(IDateTimeRange dateTimeRange)
- {
- StartTime = dateTimeRange.StartTime;
- EndTime = dateTimeRange.EndTime;
- }
- /// <summary>
- /// Gets a date range representing yesterday.
- /// </summary>
- public static DateTimeRange Yesterday
- {
- get
- {
- var now = Now;
- return new DateTimeRange(now.Date.AddDays(-1), now.Date.AddMilliseconds(-1));
- }
- }
- /// <summary>
- /// Gets a date range representing today.
- /// </summary>
- public static DateTimeRange Today
- {
- get
- {
- var now = Now;
- return new DateTimeRange(now.Date, now.Date.AddDays(1).AddMilliseconds(-1));
- }
- }
- /// <summary>
- /// Gets a date range representing tomorrow.
- /// </summary>
- public static DateTimeRange Tomorrow
- {
- get
- {
- var now = Now;
- return new DateTimeRange(now.Date.AddDays(1), now.Date.AddDays(2).AddMilliseconds(-1));
- }
- }
- /// <summary>
- /// Gets a date range representing the last month.
- /// </summary>
- public static DateTimeRange LastMonth
- {
- get
- {
- var now = Now;
- var startTime = now.Date.AddDays(-now.Day + 1).AddMonths(-1);
- var endTime = startTime.AddMonths(1).AddMilliseconds(-1);
- return new DateTimeRange(startTime, endTime);
- }
- }
- /// <summary>
- /// Gets a date range representing this month.
- /// </summary>
- public static DateTimeRange ThisMonth
- {
- get
- {
- var now = Now;
- var startTime = now.Date.AddDays(-now.Day + 1);
- var endTime = startTime.AddMonths(1).AddMilliseconds(-1);
- return new DateTimeRange(startTime, endTime);
- }
- }
- /// <summary>
- /// Gets a date range representing the next month.
- /// </summary>
- public static DateTimeRange NextMonth
- {
- get
- {
- var now = Now;
- var startTime = now.Date.AddDays(-now.Day + 1).AddMonths(1);
- var endTime = startTime.AddMonths(1).AddMilliseconds(-1);
- return new DateTimeRange(startTime, endTime);
- }
- }
- /// <summary>
- /// Gets a date range representing the last year.
- /// </summary>
- public static DateTimeRange LastYear
- {
- get
- {
- var now = Now;
- return new DateTimeRange(new DateTime(now.Year - 1, 1, 1), new DateTime(now.Year, 1, 1).AddMilliseconds(-1));
- }
- }
- /// <summary>
- /// Gets a date range representing this year.
- /// </summary>
- public static DateTimeRange ThisYear
- {
- get
- {
- var now = Now;
- return new DateTimeRange(new DateTime(now.Year, 1, 1), new DateTime(now.Year + 1, 1, 1).AddMilliseconds(-1));
- }
- }
- /// <summary>
- /// Gets a date range representing the next year.
- /// </summary>
- public static DateTimeRange NextYear
- {
- get
- {
- var now = Now;
- return new DateTimeRange(new DateTime(now.Year + 1, 1, 1), new DateTime(now.Year + 2, 1, 1).AddMilliseconds(-1));
- }
- }
- /// <summary>
- /// Gets a date range representing the last 30 days (30x24 hours) including today.
- /// </summary>
- public static DateTimeRange Last30Days
- {
- get
- {
- var now = Now;
- return new DateTimeRange(now.AddDays(-30), now);
- }
- }
- /// <summary>
- /// Gets a date range representing the last 30 days excluding today.
- /// </summary>
- public static DateTimeRange Last30DaysExceptToday
- {
- get
- {
- var now = Now;
- return new DateTimeRange(now.Date.AddDays(-30), now.Date.AddMilliseconds(-1));
- }
- }
- /// <summary>
- /// Gets a date range representing the last 7 days (7x24 hours) including today.
- /// </summary>
- public static DateTimeRange Last7Days
- {
- get
- {
- var now = Now;
- return new DateTimeRange(now.AddDays(-7), now);
- }
- }
- /// <summary>
- /// Gets a date range representing the last 7 days excluding today.
- /// </summary>
- public static DateTimeRange Last7DaysExceptToday
- {
- get
- {
- var now = Now;
- return new DateTimeRange(now.Date.AddDays(-7), now.Date.AddMilliseconds(-1));
- }
- }
- /// <summary>
- /// Returns a <see cref="System.String"/> that represents the current <see cref="DateTimeRange"/>.
- /// </summary>
- /// <returns>A <see cref="System.String"/> that represents the current <see cref="DateTimeRange"/>.</returns>
- public override string ToString()
- {
- return string.Format("[{0} - {1}]", StartTime, EndTime);
- }
- }
- }
|