読者です 読者をやめる 読者になる 読者になる

【C#】DateDiff

ただの親近感のお話です。

public class DateDiff
    {
        public int Year { get; private set; }
        public int Month { get; private set; }
        public int Week { get; private set; }
        public int Day { get; private set; }
        public int Hour { get; private set; }
        public int Minute { get; private set; }
        public int Second { get; private set; }

        public DateDiff(DateTime d1, DateTime d2)
        {
            Year = GetSpendYear(d1, d2);
            Month = GetSpendMonth(d1, d2);

            var diff = d1 > d2 ? d1 - d2 : d2 - d1;
            Week = diff.Days / 7;
            Day = diff.Days;
            Hour = diff.Hours;
            Minute = diff.Minutes;
            Second = diff.Seconds;

        }

        private int GetSpendYear(DateTime d1, DateTime d2)
        {
            var bigDate = d1 > d2 ? d1 : d2;
            var smallDate = d1 > d2 ? d2 : d1;

            var yearDiff = bigDate.Year - smallDate.Year;
            var sameDay = new DateTime(bigDate.Year, smallDate.Month, smallDate.Day);

            if (sameDay > bigDate) yearDiff -= 1;

            return yearDiff;
        }

        private int GetSpendMonth(DateTime d1, DateTime d2)
        {
            var spendYear = GetSpendYear(d1, d2);

            var bigDate = d1 > d2 ? d1 : d2;
            var smallDate = d1 > d2 ? d2 : d1;

            var monthDiff = bigDate.Month - smallDate.Month;

            return (spendYear * 12) + monthDiff;
        }

    }

例えば2013/01/31と2013/02/01をぶちこんでMonthをとると1って出てくるけど、世の中のDateDiffってそんなもんですよ。