/// <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); }
/// <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; }