Difference in months between two dates

前端 未结 30 1754
天命终不由人
天命终不由人 2020-11-22 11:02

How to calculate the difference in months between two dates in C#?

Is there is equivalent of VB\'s DateDiff() method in C#. I need to find difference in

30条回答
  •  南旧
    南旧 (楼主)
    2020-11-22 11:49

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

提交回复
热议问题