DateDiff计算问题 - 月份

时间:2012-11-27 10:58:40

标签: vb.net winforms datediff

任何人都可以为我阐明这一点,并可能建议一个解决方案。

我正在创建一个自定义日历,用于安排活动。

在构造函数中,我传递了2个日期( startDate endDate

表单有一个FlowLayoutPanel,然后使用UserControls填充月份。

我遇到的问题是,当我使用以下日期执行DateDiff(DateInterval.Month, startDate, endDate)时: startDate = 22/11/2012,endDate = 28/02/2013 结果为< EM> 3

但实际上,在日历上,我需要显示4个月 - 11月,12月,1月和1月二月

尽管如此,逻辑对于 startDate = 12/11/2012,endDate = 01/03/2012

正常工作

2 个答案:

答案 0 :(得分:2)

来自DateDiff

上的MSDN文档
  

如果Interval设置为DateInterval.Year,则返回值为   纯粹从Date1和Date2的年份部分计算。同样的,    DateInterval.Month的返回值完全由   参数的年份和月份部分,以及DateInterval.Quarter   来自包含两个日期的季度。

     

例如,比较以下的12月31日到1月1日   year,DateDiff为DateInterval.Year,DateInterval.Quarter返回1,   或DateInterval.Month,即使最多只有一天过去了。

这意味着计算并未考虑余下的日期&#39;

可能你应该建立你的自定义日历而不是使用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

答案 1 :(得分:0)

如果我理解正确,即使日期之间的实际差异小于3个月,您也希望显示4个月。一种解决方案是这样的:

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)