andrew4582

DateRangeUtil

Aug 5th, 2013
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.31 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Common.Utilities
  7. {
  8.     [System.Diagnostics.DebuggerStepThrough()]
  9.     public class DateRangeUtil
  10.     {
  11.         //public static Dictionary<int, DateRange> DefaultDateRanges { get; private set; }
  12.         public static List<DateRange> DefaultDateRanges { get; private set; }
  13.  
  14.         static DateRangeUtil()
  15.         {
  16.             DefaultDateRanges = CreateDefaultDateRanges();
  17.         }
  18.  
  19.         static List<DateRange> CreateDefaultDateRanges()
  20.         {
  21.             List<DateRange> list = new List<DateRange>();
  22.             list.Add(new DateRange(DateRangeType.All, "All"));
  23.             list.Add(new DateRange(DateRangeType.Today, "Today"));
  24.             list.Add(new DateRange(DateRangeType.ThisWeek, "This Week"));
  25.             list.Add(new DateRange(DateRangeType.ThisWeektodate, "This Week-to-date"));
  26.             list.Add(new DateRange(DateRangeType.ThisMonth, "This Month"));
  27.             list.Add(new DateRange(DateRangeType.ThisMonthtodate, "This Month-to-date"));
  28.             list.Add(new DateRange(DateRangeType.ThisQuarter, "This Quarter"));
  29.             list.Add(new DateRange(DateRangeType.ThisQuartertodate, "This Quarter-to-date"));
  30.             list.Add(new DateRange(DateRangeType.ThisYear, "This Year"));
  31.             list.Add(new DateRange(DateRangeType.ThisYeartodate, "This Year-to-date"));
  32.             list.Add(new DateRange(DateRangeType.Yesterday, "Yesterday"));
  33.             list.Add(new DateRange(DateRangeType.LastWeek, "Last Week"));
  34.             list.Add(new DateRange(DateRangeType.LastMonth, "Last Month"));
  35.             list.Add(new DateRange(DateRangeType.LastQuarter, "Last Quarter"));
  36.             list.Add(new DateRange(DateRangeType.LastYear, "Last Year"));
  37.  
  38.             foreach (DateRange range in list)
  39.                 CalculateDateRange(range);
  40.  
  41.             return list;
  42.         }
  43.  
  44.         public static void CalculateDateRange(DateRange range)
  45.         {
  46.             CalculateDateRange(range, DateTime.Today);
  47.         }
  48.  
  49.         public static void CalculateDateRange(DateRange range, DateTime todayDate)
  50.         {
  51.             DateTime beginDt = DateTime.MinValue;
  52.             DateTime endDt = DateTime.MinValue;
  53.             if (GetDates(range.RangeType, todayDate, out beginDt, out endDt))
  54.             {
  55.                 range.BeginDate = beginDt;
  56.                 range.EndDate = endDt;
  57.             }
  58.         }
  59.  
  60.         public static List<DateRange> GetDateRanges()
  61.         {
  62.             return GetDateRanges(DateTime.Today);
  63.         }
  64.  
  65.         public static List<DateRange> GetDateRanges(DateTime todayDate)
  66.         {
  67.             List<DateRange> list = new List<DateRange>(DefaultDateRanges);
  68.             foreach (DateRange range in DefaultDateRanges)
  69.                 CalculateDateRange(range, todayDate);
  70.             return list;
  71.         }
  72.  
  73.         public static bool GetDates(DateRangeType rangeType, out DateTime startDate, out DateTime stopDate)
  74.         {
  75.             return GetDates(rangeType, DateTime.Today, out startDate, out stopDate);
  76.         }
  77.  
  78.         /// <summary>
  79.         /// Based on iDateRangeName, returns 2 dates the are set to the correct start and stop dates.
  80.         /// </summary>
  81.         /// <param name="dateRangeName">
  82.         /// Specifies the date range to set to the dates for. Must be one of the DateRangeNames elements.
  83.         /// </param>
  84.         /// <param name="startDate">
  85.         /// On function return, set to the starting date based on dateRangeName.
  86.         /// </param>
  87.         /// <param name="stopDate">
  88.         /// On function return, set to the stopping date based on dateRangeName.
  89.         /// </param>
  90.         public static bool GetDates(DateRangeType rangeType, DateTime todayDate, out DateTime startDate, out DateTime stopDate)
  91.         {
  92.             DateTime StartDate = todayDate;
  93.             DateTime StopDate = todayDate;
  94.             bool result = true;
  95.  
  96.             // All.
  97.             if (rangeType == DateRangeType.All)
  98.             {
  99.                 StartDate = new DateTime(1900, 1, 1);
  100.                 StopDate = new DateTime(2100, 12, 31);
  101.             }
  102.  
  103.             // Today.
  104.             if (rangeType == DateRangeType.Today)
  105.             {
  106.                 StartDate = DateTime.Today;
  107.                 StopDate = DateTime.Today.AddDays(1);
  108.             }
  109.  
  110.             // This Week.
  111.             if (rangeType == DateRangeType.ThisWeek)
  112.             {
  113.                 // Set StartDate to most recent Sunday, first day of the current week.
  114.                 DateTime Dt = DateTime.Today;
  115.                 while (Dt.DayOfWeek != DayOfWeek.Sunday)
  116.                     Dt = Dt.AddDays(-1);
  117.                 StartDate = Dt;
  118.  
  119.                 // Set StopDate to the last day of this week, which is Saturday.
  120.                 Dt = DateTime.Today;
  121.                 while (Dt.DayOfWeek != DayOfWeek.Saturday)
  122.                     Dt = Dt.AddDays(1);
  123.                 StopDate = Dt;
  124.             }
  125.  
  126.             // This Week-to-date.
  127.             if (rangeType == DateRangeType.ThisWeektodate)
  128.             {
  129.                 // Set StartDate to most recent Sunday, first day of the current week.
  130.                 DateTime Dt = DateTime.Today;
  131.                 while (Dt.DayOfWeek != DayOfWeek.Sunday)
  132.                     Dt = Dt.AddDays(-1);
  133.                 StartDate = Dt;
  134.  
  135.                 // Set StopDate to today.
  136.                 StopDate = DateTime.Today;
  137.             }
  138.  
  139.             // This Month.
  140.             if (rangeType == DateRangeType.ThisMonth)
  141.             {
  142.                 // Set StartDate to first of current month.
  143.                 StartDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
  144.  
  145.                 // Set StopDate to last date of current month.
  146.                 DateTime Dt = new DateTime(DateTime.Today.Year, DateTime.Today.AddMonths(1).Month, 1).AddDays(-1);
  147.                 StopDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, Dt.Day);
  148.             }
  149.  
  150.             // This Month-to-date.
  151.             if (rangeType == DateRangeType.ThisMonthtodate)
  152.             {
  153.                 // Set StartDate to first of current month.
  154.                 StartDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
  155.  
  156.                 // Set StopDate to today.
  157.                 StopDate = DateTime.Today;
  158.             }
  159.  
  160.             // This Quarter.
  161.             if (rangeType == DateRangeType.ThisQuarter)
  162.             {
  163.                 // Set StartDate to first day of the 1st month of this quarter.
  164.                 int CurrentMonth = DateTime.Today.Month;
  165.                 DateTime Dt = DateTime.Today;
  166.                 while ((CurrentMonth % 3) != 0)
  167.                 {
  168.                     Dt = Dt.AddMonths(-1);
  169.                     CurrentMonth--;
  170.                 }
  171.                 StartDate = new DateTime(Dt.Year, Dt.Month, 1);
  172.  
  173.                 // Set StopDate to last date of current month.
  174.                 Dt = StartDate.AddMonths(4).AddDays(-1);
  175.                 StopDate = Dt;
  176.             }
  177.  
  178.             // This Quarter-to-date.
  179.             if (rangeType == DateRangeType.ThisQuartertodate)
  180.             {
  181.                 // Set StartDate to first day of the 1st month of this quarter.
  182.                 int CurrentMonth = DateTime.Today.Month;
  183.                 DateTime Dt = DateTime.Today;
  184.                 while ((CurrentMonth % 3) != 0)
  185.                 {
  186.                     Dt = Dt.AddMonths(-1);
  187.                     CurrentMonth--;
  188.                 }
  189.                 StartDate = new DateTime(Dt.Year, Dt.Month, 1);
  190.  
  191.                 // Set StopDate to today.
  192.                 StopDate = DateTime.Today;
  193.             }
  194.  
  195.             // This Year.
  196.             if (rangeType == DateRangeType.ThisYear)
  197.             {
  198.                 // Set StartDate to first day of the year.
  199.                 StartDate = new DateTime(DateTime.Today.Year, 1, 1);
  200.  
  201.                 // Set StopDate to last day of the year.
  202.                 StopDate = new DateTime(StartDate.AddYears(1).Year, 1, 1).AddDays(-1);
  203.             }
  204.  
  205.             // This Year-to-date.
  206.             if (rangeType == DateRangeType.ThisYeartodate)
  207.             {
  208.                 // Set StartDate to first day of the year.
  209.                 StartDate = new DateTime(DateTime.Today.Year, 1, 1);
  210.  
  211.                 // Set StopDate to today.
  212.                 StopDate = DateTime.Today;
  213.             }
  214.  
  215.             // Yesterday.
  216.             if (rangeType == DateRangeType.Yesterday)
  217.             {
  218.                 // Set StartDate to yesterday.
  219.                 StartDate = DateTime.Today.AddDays(-1);
  220.  
  221.                 // Set StopDate to yesterday.
  222.                 StopDate = DateTime.Today.AddDays(-1);
  223.             }
  224.  
  225.             // Last Week.
  226.             if (rangeType == DateRangeType.LastWeek)
  227.             {
  228.                 // Set StartDate to the first day of last week.
  229.                 StartDate = DateTime.Today.AddDays(-7);
  230.                 while (StartDate.DayOfWeek != System.DayOfWeek.Sunday)
  231.                     StartDate = StartDate.AddDays(-1);
  232.  
  233.                 // Set StopDate to the last day of last week, which was last Saturday.
  234.                 // If the current day is Saturday, then go to the previous Saturday.
  235.                 StopDate = DateTime.Today.AddDays(-1);
  236.                 while (StopDate.DayOfWeek != System.DayOfWeek.Saturday)
  237.                     StopDate = StopDate.AddDays(-1);
  238.             }
  239.  
  240.             // Last Month.
  241.             if (rangeType == DateRangeType.LastMonth)
  242.             {
  243.                 // Set StartDate to the first day of last month.
  244.                 StartDate = new DateTime(DateTime.Today.AddMonths(-1).Year, DateTime.Today.AddMonths(-1).Month, 1);
  245.  
  246.                 // Set StopDate to the last day of last month.
  247.                 StopDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddDays(-1);
  248.             }
  249.  
  250.             // Last Quarter.
  251.             if (rangeType == DateRangeType.LastQuarter)
  252.             {
  253.                 // Set StartDate to the first day of the first month of the previous quarter.
  254.                 int CurrentMonth = DateTime.Today.Month;
  255.                 DateTime Dt = DateTime.Today;
  256.                 while ((CurrentMonth % 3) != 0)
  257.                 {
  258.                     Dt = Dt.AddMonths(-1);
  259.                     CurrentMonth--;
  260.                 }
  261.                 StartDate = Dt.AddMonths(-3);
  262.  
  263.                 // Set StopDate to the last day of last month.
  264.                 StopDate = StartDate.AddMonths(4).AddDays(-1);
  265.             }
  266.  
  267.             // Last Year.
  268.             if (rangeType == DateRangeType.LastQuarter)
  269.             {
  270.                 // Set StartDate to first day of the last year.
  271.                 StartDate = new DateTime(DateTime.Today.AddYears(-1).Year, 1, 1);
  272.  
  273.                 // Set StopDate to the last day of the last year.
  274.                 StopDate = StartDate.AddYears(1).AddDays(-1);
  275.             }
  276.  
  277.             //// Custom.
  278.             //if (dateRangeName == DateRangeNames[15])
  279.             //{
  280.             //    // Don't return anything.
  281.             //    result = false;
  282.             //}
  283.  
  284.             startDate = StartDate;
  285.             stopDate = StopDate;
  286.  
  287.             return result;
  288.         }
  289.  
  290.         /// <summary>
  291.         /// Returns a starting date based on today's date, for the dateRangeName.
  292.         /// </summary>
  293.         public static DateTime GetStartDate(DateRangeType rangeType)
  294.         {
  295.             DateTime StartDate;
  296.             DateTime StopDate;
  297.             GetDates(rangeType, out StartDate, out StopDate);
  298.  
  299.             return StartDate;
  300.         }
  301.  
  302.         /// <summary>
  303.         /// Returns a stopping date based on today's date, for the dateRangeName.
  304.         /// </summary>
  305.         public static DateTime GetStopDate(DateRangeType rangeType)
  306.         {
  307.             DateTime StartDate;
  308.             DateTime StopDate;
  309.             GetDates(rangeType, out StartDate, out StopDate);
  310.  
  311.             return StopDate;
  312.         }
  313.     }
  314.  
  315.     public class DateRange
  316.     {
  317.         public string Name { get; set; }
  318.         public DateRangeType RangeType { get; set; }
  319.         public DateTime? BeginDate { get; set; }
  320.         public DateTime? EndDate { get; set; }
  321.  
  322.         public DateRange(DateRangeType rangeType, string name)
  323.             : this(rangeType, name, null, null) { }
  324.  
  325.         public DateRange(DateRangeType rangeType, string name, DateTime? beginDt, DateTime? endDt)
  326.         {
  327.             this.RangeType = rangeType;
  328.             this.Name = name;
  329.             this.BeginDate = beginDt;
  330.             this.EndDate = endDt;
  331.         }
  332.     }
  333.  
  334.     public enum DateRangeType
  335.     {
  336.         All = 0,
  337.         Today = 1,
  338.         ThisWeek = 2,
  339.         ThisWeektodate = 3,
  340.         ThisMonth = 4,
  341.         ThisMonthtodate = 5,
  342.         ThisQuarter = 6,
  343.         ThisQuartertodate = 7,
  344.         ThisYear = 8,
  345.         ThisYeartodate = 9,
  346.         Yesterday = 10,
  347.         LastWeek = 11,
  348.         LastMonth = 12,
  349.         LastQuarter = 13,
  350.         LastYear = 14,
  351.     }
  352. }
Advertisement
Add Comment
Please, Sign In to add comment