2009-04-20 75 views
0

要求:如何計算兩個DateTime之間的月數?

  • 計算兩個日期之間的月 數量:receiveDate和 的dueDate。
  • 樂觀和悲觀 計算需要

假設:

  • 的dueDate將永遠是這個月的最後一天。

我已經想通了悲觀的計算(即:單一天逾期計爲一整月。

if(receiveDate > dueDate) 
    receiveDate.Month - dueDate.Month + (receiveDate.Year - dueDate.Year) * 12; 

做了搜索在互聯網上翻了幾個類似的例子來證實這一點

現在,我的直覺告訴我,樂觀的計算也只是同負一一個月,但由於某種原因,它只是不適合我。我在正確的軌道上還是我失去了一些東西?

+1

不明白'樂觀/悲觀'的東西。兩個日期之間的月數是否定義爲「兩個日期之間有一天或多天的月數,包括」?在這種情況下,不會有一個正確的答案。 – mackenir 2009-04-20 15:45:32

回答

1

你是對的;如果您正在查找兩個日期之間的完整個月的數量,則減去1(假設receiveDate不在本月的最後一天,在這種情況下,您將在任何一種情況下剩餘時間爲0天)會給你你的答案。

0

如果你不需要在你的微積分中保留幾個月的天數,我認爲這是要走的路。

0

您的公式計算receivedDate的第一個月到dueDate的第一個月之間的月數。由於TimeSpan中的大多數時間元素都表達爲TotalXXX,所以他們遺漏了TotalMonths和TotalYears似乎很奇怪。

我認爲這是因爲每個月都沒有固定的天數,所以很難知道如何表達分數餘數。

我的公式是這樣的......

 

int nMonthDiff_FirstToFirst = DateTime.Now.Month - testDate.Month + ((DateTime.Now.Year - testDate.Year)* 12); 

double dMonthDiff = (double)nMonthDiff_FirstToFirst + (DateTime.Now - testDate.AddMonths(nMonthDiff_FirstToFirst)).TotalDays/(double)DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); 
 

所以我做的是基本上得到月份差像你(當月的第一天至當月的第一天),那麼,什麼項目我我testDate成未來按月份差異。然後用那個TimeSpan我得到TotalDays並且除以那個月的天數。因此,我以月份的剩餘天數表示小數部分。

所以如果你要去2012年5月5日 - > 2012年6月3日,你的公式將返回1爲月份的差異,當一整個月還沒有通過。在我的公式中,預計日期的總日數會產生負數的小數天數,並且在添加到「第一個到第一個」月份的差異時,它會根據需要採用。

0

我這樣做額外的檢查,以獲得個月的確切數額:

NUMBEROFMONTHS = receiveDate.Month - dueDate.Month +(receiveDate.Year - dueDate.Year)* 12; if(receiveDate.Day> dueDate。日)numberOfMonths--;

0
int GetMonthsCount(DateTime dtStart, DateTime dtEnd) 
{ 
    return (int)Math.Round((dtEnd - dtStart).TotalMonths); 
} 
相關問題