計算兩個日期之間的月份數


       網上搜計算兩個日期之間的月份數,可能會有一大堆,像Date1 和 Date2 之間的年數相減得到一個差額然后乘以12 再加上 兩日期相減得到的月數 ,就以為得到兩日期之間的月數,事實證明有問題。

如2018.4.1到2018.5.1還好,但如果有些涉及到金額的,他們認為四月有效期是2018.4.1 -2018.4.30,這時你計算的將變成0,不涉及到財務還好,要是真有一天你萬一信了,也沒驗證,對賬出問題,

然后最后發現原來是你代碼寫的有問題,這個問題就放大了,有點致命!

 

 

附上代碼

/// <summary>
/// 計算實際月數
/// </summary>
/// <param name="dteStartTime">起始時間</param>
/// <param name="dteEndTime">結束時間</param>
/// <returns>返回續費月數</returns>
private static int CalInFactMonth(DateTime dteStartTime, DateTime dteEndTime)
{
  int intMonths;
  int intYear1 = dteEndTime.Year - dteStartTime.Year;
  intMonths = dteEndTime.Month - dteStartTime.Month + intYear1 * 12;

  //判斷是 否是潤年

  bool blnIsLeap = IsLeapYear(dteEndTime.Year);
  if (dteEndTime.Day != dteStartTime.Day)
  {
    int intResult = dteEndTime.Day - dteStartTime.Day + 1;
    int intMon = dteEndTime.Month;

    if (intMon == 1 || intMon == 3 || intMon == 5 || intMon == 7 || intMon == 8 || intMon == 10 || intMon == 12)
    {
      if (intResult == 31)
      {
        intMonths += 1;
      }
    }
    else if (intMon == 4 || intMon == 6 || intMon == 9 || intMon == 11)
    {
      if (intResult == 30)
      {
        intMonths += 1;
      }
    }
    else
    {
      if (blnIsLeap)
      {
        if ( intResult == 29)
        {
          intMonths += 1;
        }
      }
      else
      {
        if (intResult == 28)
        {
          intMonths += 1;
        }
      }
    }
  }
  return intMonths;
}
/// <summary>
/// 計算兩個月份之間的實際月數
/// </summary>
/// <param name="year">年份</param>
/// <returns>true 潤年 false </returns>
private static bool IsLeapYear(int year)
{
  bool blnReturn = false;
  if (year <= 0)
  {
    return false;
  }
  if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
  {
    blnReturn = true;
  }
  return blnReturn;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM