任何人都可以为我阐明这一点,并可能建议一个解决方案。
我正在创建一个自定义日历,用于安排活动。
在构造函数中,我传递了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
正常工作答案 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)