Quantcast
Viewing all articles
Browse latest Browse all 46

Answer by Dan Sutton for Difference in months between two dates

Based on the excellent DateTimeSpan work done above, I've normalized the code a bit; this seems to work pretty well:

public class DateTimeSpan{  private DateTimeSpan() { }  private DateTimeSpan(int years, int months, int days, int hours, int minutes, int seconds, int milliseconds)  {    Years = years;    Months = months;    Days = days;    Hours = hours;    Minutes = minutes;    Seconds = seconds;    Milliseconds = milliseconds;  }  public int Years { get; private set; } = 0;  public int Months { get; private set; } = 0;  public int Days { get; private set; } = 0;  public int Hours { get; private set; } = 0;  public int Minutes { get; private set; } = 0;  public int Seconds { get; private set; } = 0;  public int Milliseconds { get; private set; } = 0;  public static DateTimeSpan CompareDates(DateTime StartDate, DateTime EndDate)  {    if (StartDate.Equals(EndDate)) return new DateTimeSpan();    DateTimeSpan R = new DateTimeSpan();    bool Later;    if (Later = StartDate > EndDate)    {      DateTime D = StartDate;      StartDate = EndDate;      EndDate = D;    }    // Calculate Date Stuff    for (DateTime D = StartDate.AddYears(1); D < EndDate; D = D.AddYears(1), R.Years++) ;    if (R.Years > 0) StartDate = StartDate.AddYears(R.Years);    for (DateTime D = StartDate.AddMonths(1); D < EndDate; D = D.AddMonths(1), R.Months++) ;    if (R.Months > 0) StartDate = StartDate.AddMonths(R.Months);    for (DateTime D = StartDate.AddDays(1); D < EndDate; D = D.AddDays(1), R.Days++) ;    if (R.Days > 0) StartDate = StartDate.AddDays(R.Days);    // Calculate Time Stuff    TimeSpan T1 = EndDate - StartDate;    R.Hours = T1.Hours;    R.Minutes = T1.Minutes;    R.Seconds = T1.Seconds;    R.Milliseconds = T1.Milliseconds;    // Return answer. Negate values if the Start Date was later than the End Date    if (Later)      return new DateTimeSpan(-R.Years, -R.Months, -R.Days, -R.Hours, -R.Minutes, -R.Seconds, -R.Milliseconds);    return R;  }}

Viewing all articles
Browse latest Browse all 46

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>