Пример #1
0
        /// <summary>
        /// Calculates the difference between 2 dates in years, months, weeks, days, hours and seconds
        /// </summary>
        /// <param name="dateTime1"></param>
        /// <param name="dateTime2"></param>
        /// <returns></returns>
        public static DateDifference Difference(DateTime dateTime1, DateTime dateTime2)
        {
            if (dateTime1 > dateTime2)
            {
                var dtTemp = dateTime1;
                dateTime1 = dateTime2;
                dateTime2 = dtTemp;
            }

            var dateDiff = new DateDifference {
                Years = dateTime2.Year - dateTime1.Year
            };

            if (dateDiff.Years > 0)
            {
                if (dateTime2.Month < dateTime1.Month)
                {
                    dateDiff.Years--;
                }
                else if (dateTime2.Month == dateTime1.Month)
                {
                    if (dateTime2.Day < dateTime1.Day)
                    {
                        dateDiff.Years--;
                    }
                    else if (dateTime2.Day == dateTime1.Day)
                    {
                        if (dateTime2.Hour < dateTime1.Hour)
                        {
                            dateDiff.Years--;
                        }
                        else if (dateTime2.Hour == dateTime1.Hour)
                        {
                            if (dateTime2.Minute < dateTime1.Minute)
                            {
                                dateDiff.Years--;
                            }
                            else if (dateTime2.Minute == dateTime1.Minute)
                            {
                                if (dateTime2.Second < dateTime1.Second)
                                {
                                    dateDiff.Years--;
                                }
                            }
                        }
                    }
                }
            }

            dateDiff.Months = dateTime2.Month - dateTime1.Month;
            if (dateTime2.Month < dateTime1.Month)
            {
                dateDiff.Months = 12 - dateTime1.Month + dateTime2.Month;
            }

            if (dateDiff.Months > 0)
            {
                if (dateTime2.Day < dateTime1.Day)
                {
                    dateDiff.Months--;
                }
                else if (dateTime2.Day == dateTime1.Day)
                {
                    if (dateTime2.Hour < dateTime1.Hour)
                    {
                        dateDiff.Months--;
                    }
                    else if (dateTime2.Hour == dateTime1.Hour)
                    {
                        if (dateTime2.Minute < dateTime1.Minute)
                        {
                            dateDiff.Months--;
                        }
                        else if (dateTime2.Minute == dateTime1.Minute)
                        {
                            if (dateTime2.Second < dateTime1.Second)
                            {
                                dateDiff.Months--;
                            }
                        }
                    }
                }
            }

            dateDiff.Days = dateTime2.Day - dateTime1.Day;
            if (dateTime2.Day < dateTime1.Day)
            {
                dateDiff.Days = DateTime.DaysInMonth(dateTime1.Year, dateTime1.Month) - dateTime1.Day + dateTime2.Day;
            }

            if (dateDiff.Days > 0)
            {
                if (dateTime2.Hour < dateTime1.Hour)
                {
                    dateDiff.Days--;
                }
                else if (dateTime2.Hour == dateTime1.Hour)
                {
                    if (dateTime2.Minute < dateTime1.Minute)
                    {
                        dateDiff.Days--;
                    }
                    else if (dateTime2.Minute == dateTime1.Minute)
                    {
                        if (dateTime2.Second < dateTime1.Second)
                        {
                            dateDiff.Days--;
                        }
                    }
                }
            }

            dateDiff.Weeks = dateDiff.Days / 7;
            dateDiff.Days  = dateDiff.Days % 7;

            dateDiff.Hours = dateTime2.Hour - dateTime1.Hour;
            if (dateTime2.Hour < dateTime1.Hour)
            {
                dateDiff.Hours = 24 - dateTime1.Hour + dateTime2.Hour;
            }

            if (dateDiff.Hours > 0)
            {
                if (dateTime2.Minute < dateTime1.Minute)
                {
                    dateDiff.Hours--;
                }
                else if (dateTime2.Minute == dateTime1.Minute)
                {
                    if (dateTime2.Second < dateTime1.Second)
                    {
                        dateDiff.Hours--;
                    }
                }
            }

            dateDiff.Minutes = dateTime2.Minute - dateTime1.Minute;
            if (dateTime2.Minute < dateTime1.Minute)
            {
                dateDiff.Minutes = 60 - dateTime1.Minute + dateTime2.Minute;
            }

            if (dateDiff.Minutes > 0)
            {
                if (dateTime2.Second < dateTime1.Second)
                {
                    dateDiff.Minutes--;
                }
            }

            dateDiff.Seconds = dateTime2.Second - dateTime1.Second;

            if (dateTime2.Second < dateTime1.Second)
            {
                dateDiff.Seconds = 60 - dateTime1.Second + dateTime2.Second;
            }

            return(dateDiff);
        }
Пример #2
0
        /// <summary>
        /// Calculates the difference between 2 dates in years, months, weeks, days, hours and seconds
        /// </summary>
        /// <param name="dateTime1"></param>
        /// <param name="dateTime2"></param>
        /// <returns></returns>
        public static DateDifference Difference(DateTime dateTime1, DateTime dateTime2)
        {
            if (dateTime1 > dateTime2)
            {
                var dtTemp = dateTime1;
                dateTime1 = dateTime2;
                dateTime2 = dtTemp;
            }

            var dateDiff = new DateDifference {Years = dateTime2.Year - dateTime1.Year};
            if (dateDiff.Years > 0)
                if (dateTime2.Month < dateTime1.Month)
                    dateDiff.Years--;
                else if (dateTime2.Month == dateTime1.Month)
                    if (dateTime2.Day < dateTime1.Day)
                        dateDiff.Years--;
                    else if (dateTime2.Day == dateTime1.Day)
                        if (dateTime2.Hour < dateTime1.Hour)
                            dateDiff.Years--;
                        else if (dateTime2.Hour == dateTime1.Hour)
                            if (dateTime2.Minute < dateTime1.Minute)
                                dateDiff.Years--;
                            else if (dateTime2.Minute == dateTime1.Minute)
                                if (dateTime2.Second < dateTime1.Second)
                                    dateDiff.Years--;

            dateDiff.Months = dateTime2.Month - dateTime1.Month;
            if (dateTime2.Month < dateTime1.Month)
                dateDiff.Months = 12 - dateTime1.Month + dateTime2.Month;
            
            if (dateDiff.Months > 0)
                if (dateTime2.Day < dateTime1.Day)
                    dateDiff.Months--;
                else if (dateTime2.Day == dateTime1.Day)
                    if (dateTime2.Hour < dateTime1.Hour)
                        dateDiff.Months--;
                    else if (dateTime2.Hour == dateTime1.Hour)
                        if (dateTime2.Minute < dateTime1.Minute)
                            dateDiff.Months--;
                        else if (dateTime2.Minute == dateTime1.Minute)
                            if (dateTime2.Second < dateTime1.Second)
                                dateDiff.Months--;

            dateDiff.Days = dateTime2.Day - dateTime1.Day;
            if (dateTime2.Day < dateTime1.Day)
                dateDiff.Days = DateTime.DaysInMonth(dateTime1.Year, dateTime1.Month) - dateTime1.Day + dateTime2.Day;
            
            if (dateDiff.Days > 0)
                if (dateTime2.Hour < dateTime1.Hour)
                    dateDiff.Days--;
                else if (dateTime2.Hour == dateTime1.Hour)
                    if (dateTime2.Minute < dateTime1.Minute)
                        dateDiff.Days--;
                    else if (dateTime2.Minute == dateTime1.Minute)
                        if (dateTime2.Second < dateTime1.Second)
                            dateDiff.Days--;

            dateDiff.Weeks = dateDiff.Days/7;
            dateDiff.Days = dateDiff.Days%7;

            dateDiff.Hours = dateTime2.Hour - dateTime1.Hour;
            if (dateTime2.Hour < dateTime1.Hour)
                dateDiff.Hours = 24 - dateTime1.Hour + dateTime2.Hour;
        
            if (dateDiff.Hours > 0)
                if (dateTime2.Minute < dateTime1.Minute)
                    dateDiff.Hours--;
                else if (dateTime2.Minute == dateTime1.Minute)
                    if (dateTime2.Second < dateTime1.Second)
                        dateDiff.Hours--;

            dateDiff.Minutes = dateTime2.Minute - dateTime1.Minute;
            if (dateTime2.Minute < dateTime1.Minute)
                dateDiff.Minutes = 60 - dateTime1.Minute + dateTime2.Minute;
        
            if (dateDiff.Minutes > 0)
                if (dateTime2.Second < dateTime1.Second)
                    dateDiff.Minutes--;
        
            dateDiff.Seconds = dateTime2.Second - dateTime1.Second;
            
            if (dateTime2.Second < dateTime1.Second)
                dateDiff.Seconds = 60 - dateTime1.Second + dateTime2.Second;
            
            return dateDiff;
        }