2012-11-27 54 views
0

請任何人都可以爲我闡明這一點,並可能提出一個解決方案。DateDiff計算問題 - 月

我正在創建一個將用於安排事件的自定義日曆。

在我通過在2周的日期(的startDate和結束日期

形式構造具有FlowLayoutPanel的,然後與用戶控件的月填充。

我遇到的問題是,當我做了DateDiff(DateInterval.Month, startDate, endDate)與日期如下:的startDate = 22/11/2012,結束日期= 28/02/2013結果是。

但實際上,在日曆上,我需要顯示4月 - 十一月,十二月,一月二月&

,雖然說,邏輯可以正確處理的startDate = 2012年12月11日,結束日期= 01/03/2012

+0

那麼,間隔時間剛剛超過3個月,所以它就像3個月和6天左右(左右)。您獲得了整整數月的正確價值,但似乎還想將額外的日子計爲另一個月。 – Oded

+0

但即使我確定日期,即設置startDate = 01/11/2012並設置endDate = 31/02/2013我仍然沒有得到4個月。 –

+0

對不起,我的意思是endDate = 28/02/2013 –

回答

2

從MSDN文檔上DateDiff

如果時間間隔設置爲DateInterval.Year,返回值是 從日期的年份部分純粹計算1和Date2。同樣, DateInterval.Month的返回值純粹從 參數的年份和月份部分以及包含兩個日期的宿舍中的DateInterval.Quarter 來計算。

例如,比較12月31日當以下 年1月1日,則DateDiff對DateInterval.Year,DateInterval.Quarter, 或DateInterval.Month返回1,即使在最只有一天已經過去。

這意味着計算不佔其餘的「天」,

也許你應該建立自己的自定義日曆不使用則DateDiff對發現涉及的月份。
而不是你的工作應該使用僞像這樣:

Dim curMonth = startDate.Month 
Dim curYear = startDate.Year 
while curMonth <= endDate.Month andalso curYear <= endDate.Year 
    AddCalendar(curMonth, curYear) 
    curMonth = curMonth + 1 
    if curMonth > 12 then 
     curMonth = 1 
     curYear = curYear + 1 
    end if 
end while 
0

如果我理解正確的話,你會想顯示4個月即使日期之間的實際差異小於3個月。一種解決方案是這樣的:

Dim startDate = #11/22/2012# 'Nov 22nd 
Dim endDate = #2/2/2013# 'Feb 2nd 

Dim startMonth = new DateTime (startDate.Year, startDate.Month, 1) 
Dim endMonth = new DateTime (endDate.Year, endDate.Month, 1).AddMonths (1) 
Dim diff = DateDiff (DateInterval.Month, startMonth, endMonth) 
+0

我希望日曆在日期範圍內顯示所有月份,這是正確的。 但是,我不想顯示額外的,不需要的月份,我擔心你的解決方案可能會在dateDiff現在工作正常的情況下執行此操作。 –

+0

我的解決方案包括開始月份,結束月份和所有月份之間(並且沒有其他)。 –