C#计算两个日期间隔的年月日,精确到日的算法。

/// <summary>
        /// 计算两个日期间隔的年月日
        /// </summary>
        /// <param name="MinDate"></param>
        /// <param name="MaxDate"></param>
        /// <returns></returns>
        public static string GetDiffDate(DateTime MinDate, DateTime MaxDate)
        {
            string result = "";
            GetDiffDateModel flag = new GetDiffDateModel();
            GetDiffDateModel _minDate = new GetDiffDateModel();
            _minDate.Year = MinDate.Year;
            _minDate.Month = MinDate.Month;
            _minDate.Day = MinDate.Day;
            GetDiffDateModel _maxDate = new GetDiffDateModel();
            _maxDate.Year = MaxDate.Year;
            _maxDate.Month = MaxDate.Month;
            _maxDate.Day = MaxDate.Day;
            //只比较年月日
            DateTime _MinDate = new DateTime(MinDate.Year, MinDate.Month, MinDate.Day);
            DateTime _MaxDate = new DateTime(MaxDate.Year, MaxDate.Month, MaxDate.Day);

            int flageDay = 0;
            //防呆
            if (_MinDate >= _MaxDate)
            {
                result = "开始日期大于截止日期!";
                return result;
            }
            //年
            flag.Year = _maxDate.Year - _minDate.Year;
            if (flag.Year <= 0) { flag.Year = 0; }
            //月
            if (_maxDate.Month < _minDate.Month)
            {

                if (flag.Year <= 0)
                {
                    result = "年份计算异常!";
                    return result;
                }
                else
                {
                    flag.Year--;

                }
                flag.Month = (_maxDate.Month + 12) - _minDate.Month;
            }
            else
            {
                flag.Month = _maxDate.Month - _minDate.Month;
            }
            //日
            if (_maxDate.Day < _minDate.Day)
            {

                if (flag.Month <= 0)
                {
                    flag.Year--;
                    flag.Month = 12;
                }
         

                if (_maxDate.Month==1)
                {
                    _maxDate.Month =12;
                }
                else
                {
                    _maxDate.Month = _maxDate.Month - 1;
                }
           




                switch (_maxDate.Month)
                {
                    case 2:
                        flageDay = DateTime.DaysInMonth(_maxDate.Year, _maxDate.Month);
                        int year = _maxDate.Year;
                        if (year % 4 == 0 && year % 100 != 0)
                        {
                            if (flageDay == 29 && _maxDate.Day == 29)
                            {
                                flag.Day = 0;
                                flag.Month++;
                            }
                            else
                            {
                                flag.Day = _maxDate.Day + 29 - (_minDate.Day);
                            }
                        }
                        else
                        {
                            if (flageDay == 28 && _maxDate.Day == 28)
                            {
                                flag.Day = 0;
                                flag.Month++;
                            }
                            else
                            {
                                flag.Day = _maxDate.Day + 28 - (_minDate.Day);
                            }
                        }
                        break;

                }
                if (_maxDate.Month == 1 || _maxDate.Month == 3 || _maxDate.Month == 5 || _maxDate.Month == 7 || _maxDate.Month == 8 || _maxDate.Month == 10 || _maxDate.Month == 12)
                {
                    if (_maxDate.Day == 31)
                    {
                        flag.Day = 0;
                        flag.Month++;
                    }
                    else
                    {
                        flag.Day = _maxDate.Day+31 - (_minDate.Day);
                    }
                }
                else if (_maxDate.Month == 4 || _maxDate.Month == 6 || _maxDate.Month == 9 || _maxDate.Month == 11)
                {
                    if (_maxDate.Day == 30)
                    {
                        flag.Day = 0;
                        flag.Month++;
                    }
                    else
                    {
                        flag.Day = _maxDate.Day + 30 - (_minDate.Day);
                    }
                }

                flag.Month--;
            }
            else
            {
                flag.Day = _maxDate.Day - _minDate.Day;
            }
            //格式化文本年月日
            if (flag.Day > 0)
            {
                if (flag.Day == 31)
                {
                    flag.Month++;
                    flag.Day = 0;
                }
                else
                {
                    if (flag.Year > 0 || flag.Month > 0)
                    {
                        result = "零" + flag.Day.ToString() + "天";
                    }
                    else
                    {
                        result = flag.Day.ToString() + "天";
                    }

                }
            }
            if (flag.Month > 0)
            {
                if (flag.Day == 12)
                {
                    flag.Year++;
                    flag.Month = 0;
                }
                else
                {
                    result = flag.Month.ToString() + "个月" + result;
                }
            }
            if (flag.Year > 0) { result = flag.Year.ToString() + "年" + result; }

            return result;
        }


    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾荒网络工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值