Helper class that provides most commonly used Extension Methods for DateTime object

The following class returns extended functionality on DATETIME objects. In the project that consists this class, it can be directly used with any DATETIME object. if not add reference to this assembly and then you can use it on any DATETIME object

using System;
using System.Collections.Generics;

namespace Utilities
{
    /// <summary>
    /// DayExtensions
    /// </summary>
    public static class DayExtensions
    {

         /// <summary>
        /// Determines whether the specified current date is future date.
        /// </summary>
        /// <param name="date">The date.</param>
        /// <returns>
        ///     <c>true</c> if [is future date] [the specified date]; otherwise, <c>false</c>.
        /// </returns>
        public static bool IsFutureDate(this DateTime date)
        {
             int currentYear = DateTime.Now.Year;
             bool isFutureDate = false;

             //Future Year.
            if (date.Year > currentYear)
            {
                isFutureDate = true;
            }
            else
            {
                 if (date.Year < currentYear)
                 {
                      //Earlier Year.
                    isFutureDate = false;

                 }
                 else
                 {
                     //Current Year.
                    isFutureDate = date.DayOfYear > DateTime.Now.DayOfYear ? true : false;
                 }
             }
             return isFutureDate;
        }


        /// <summary>
        /// Determines whether [is weekend date] [the specified date].
        /// </summary>
        /// <param name="date">The date.</param>
        /// <returns>
        ///     <c>true</c> if [is weekend date] [the specified date]; otherwise, <c>false</c>.
        /// </returns>
        public static bool IsWeekendDate(this DateTime date)
        {
             if ((date.DayOfWeek == DayOfWeek.Saturday) || (date.DayOfWeek == DayOfWeek.Sunday))
            {
                 return true;
            }
            else
            {
                 return false;
            }
        }

         /// <summary>
        /// Lasts the day.
        /// </summary>
        /// <param name="date">The date.</param>
        /// <returns></returns>
        public static DateTime LastDay(this DateTime date)
        {
             int daysInMonth = DateTime.DaysInMonth(date.Year, date.Month);

            DateTime lastDay = date.FirstDay().AddDays(daysInMonth - 1);

             return lastDay;
        }

         /// <summary>
        /// Returns a DateTime representing the first day in the current month
        /// </summary>
        /// <param name="date">The date</param>
        /// <returns></returns>
        public static DateTime FirstDay(this DateTime date)
        {
            DateTime firstday = date.AddDays(1 - date.Day);
             return firstday;
        }

        /// <summary>
        /// Returns a DateTime representing the first specified day in the current month
        /// </summary>
        /// <param name="date">The day</param>
        /// <param name="dayOfWeek">The current day of week</param>
        /// <returns></returns>
        public static DateTime FirstDayofWeek(this DateTime date, DayOfWeek dayOfWeek)
        {
            DateTime first = date.FirstDay();

             if (first.DayOfWeek != dayOfWeek)
            {
                first = first.Next(dayOfWeek);
             }

             return first;
        }


        /// <summary>
        /// Returns a DateTime representing the last specified day in the current month
        /// </summary>
        /// <param name="date">The date</param>
        /// <param name="dayOfWeek">The current day of week</param>
        /// <returns></returns>
        public static DateTime Last(this DateTime date, DayOfWeek dayOfWeek)
        {
            DateTime last = date.LastDay();

            last = last.AddDays(Math.Abs(dayOfWeek - last.DayOfWeek) * -1);

             return last;
        }

         /// <summary>
        /// Returns aDateTime representing the first date following the current date which falls on the given day of the week
        /// </summary>
        /// <param name="date">The date</param>
        /// <param name="dayOfWeek">The day of week for the next date to get</param>
        /// <returns></returns>
        public static DateTime Next(this DateTime date, DayOfWeek dayOfWeek)
         {
             int offsetDays = dayOfWeek - date.DayOfWeek;

             if (offsetDays <= 0)
            {
                offsetDays += 7;
            }

           return date.AddDays(offsetDays);
        }

        /// <summary>
        /// Gets the Previous/Last occured Friday's Date. Returns this friday if the date is in current week. or the
        /// </summary>
        /// <param name="current">The current.</param>
        /// <param name="defaultDate">The default date.</param>
        /// <returns></returns>
        public static DateTime LastFriday(this DateTime current, DateTime? defaultDate)
        {

            DayOfWeek today         = DateTime.Now.DayOfWeek;
            int days                = today - DayOfWeek.Sunday;
            DateTime weekStartDate  = DateTime.Now.AddDays(-days);
            DateTime weekEndDate    = weekStartDate.AddDays(6);

            double offset = 0;

             if ((current.Ticks > weekStartDate.Ticks) && (current.Ticks < weekEndDate.Ticks))
            {
                 //Selected date is in current week. Adjust the offset and send it back.
                 switch (current.DayOfWeek)
                 {
                      case DayOfWeek.Monday:
                        offset = -3;
                         break;
                     case DayOfWeek.Tuesday:
                        offset = -4;
                         break;
                     case DayOfWeek.Wednesday:
                        offset = -5;
                         break;
                     case DayOfWeek.Thursday:
                        offset = -6;
                         break;
                     case DayOfWeek.Friday:
                        offset = -7;
                         break;
                     case DayOfWeek.Saturday:
                        offset = -1;
                         break;
                     case DayOfWeek.Sunday:
                        offset = -2;
                         break;
                 }
             }
             else
            {
                 //return friday of selected day's week.
                 switch (current.DayOfWeek)
                 {
                      case DayOfWeek.Monday:
                        offset = 4;
                         break;
                     case DayOfWeek.Tuesday:
                        offset = 3;
                         break;
                     case DayOfWeek.Wednesday:
                        offset = 2;
                         break;
                     case DayOfWeek.Thursday:
                        offset = 1;
                         break;
                     case DayOfWeek.Friday:
                        offset = 0;
                         break;
                     case DayOfWeek.Saturday:
                        offset = -1;
                         break;
                     case DayOfWeek.Sunday:
                        offset = 5;
                         break;
                }
            }
          
            return current.AddDays(offset);
        }
    }
By [)ia6l0 iii   Popularity  (1458 Views)