0

请任何人都可以为我阐明这一点,并可能提出解决方案。

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

在构造函数中,我传入 2 个日期(startDateendDate

该表单有一个 FlowLayoutPanel,然后填充了月份的 UserControls。

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

但是,实际上,在日历上,我需要显示 4 个月——11 月、12 月、1 月和 2 月。

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

4

2 回答 2

2

来自DateDiff上的 MSDN 文档

如果 Interval 设置为 DateInterval.Year,则返回值仅根据 Date1 和 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
于 2012-11-27T11:17:13.740 回答
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)
于 2012-11-27T11:19:30.420 回答