?
Solved

C# DateDiff in Months

Posted on 2014-11-06
2
Medium Priority
?
376 Views
Last Modified: 2014-11-12
I need to get the difference in months between two dates.

In SQL, this is what I need:
select DATEDIFF(MONTH, '11/1/2014', DATEADD(mm, DATEDIFF(mm, 0, '12/31/2014') + 1, 0)) 

Open in new window


The above date difference should be 2 months.
Difference between 12/10/2014 and 12/20/2014 = 1 month.
Difference between 11/1/2012 and 12/31/2014 = 26 months.

How do I do the same in C#?
0
Comment
Question by:pzozulka
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
2 Comments
 
LVL 14

Accepted Solution

by:
Vel Eous earned 1000 total points
ID: 40427398
The following should give what you are looking for:

namespace EE.Q_28552505.ConsoleApp
{
    using System;

    internal class Program
    {
        private static void Main(string[] args)
        {
            var dateTimeA = new DateTime(2013, 11, 1);
            var dateTimeB = DateTime.UtcNow;

            var difference = ((dateTimeB.Year - dateTimeA.Year) * 12) + dateTimeB.Month - dateTimeA.Month;

            Console.WriteLine(difference); // output is 12

            Console.ReadKey();
        }
    }
}

Open in new window

0
 
LVL 51

Assisted Solution

by:Gustav Brock
Gustav Brock earned 1000 total points
ID: 40434947
Assuming there is some specifics behind the "custom" calculation, it is probably much more straight-forward to mimic it in VB.NET:
using System;
using Microsoft.VisualBasic;

namespace DateDiff
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTest test = new DateTest ();

            //DateTime date1 = new DateTime(2014,11,1);
            //DateTime date2 = new DateTime(2014,12,21);
            //DateTime date1 = new DateTime(2014, 12, 10);
            //DateTime date2 = new DateTime(2014, 12, 20);
            DateTime date1 = new DateTime(2012, 11, 1);
            DateTime date2 = new DateTime(2014, 12, 21);

            long diff = test.DDiff(date1, date2);
            Console.WriteLine(diff.ToString());
            Console.Read();
        }
    }

    public class DateTest
    {
      
        public long DDiff(DateTime Date1,DateTime Date2) 
        {
            DateTime dat0 = new DateTime(1899, 12, 30);
            return DateAndTime.DateDiff("M", Date1, DateAndTime.DateAdd("M", DateAndTime.DateDiff("M", dat0, Date2) + 1, dat0));
        }

    }

}

Open in new window

This returns the expected results.

/gustav
0

Featured Post

How to Create Failover DNS Record Sets in Route 53

Route 53 has the ability to easily configure DNS record sets specifically for failover scenarios. These failover record sets can be configured to failover to full-blown deployments in other regions or to a static HTML page that informs your customers of the issue.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For both online and offline retail, the cross-channel business is the most recent pattern in the B2C trade space.
In the first part of this tutorial we will cover the prerequisites for installing SQL Server vNext on Linux.
Via a live example, show how to backup a database, simulate a failure backup the tail of the database transaction log and perform the restore.
Viewers will learn how to use the SELECT statement in SQL to return specific rows and columns, with various degrees of sorting and limits in place.
Suggested Courses

741 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question