首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个日期之间的月数

两个日期之间的月数
EN

Stack Overflow用户
提问于 2014-05-19 18:39:07
回答 2查看 8.5K关注 0票数 2

我试图创建一个公式或VBA函数来计算两个日期之间的月数,根据这个规则:如果开始日期是月的第15天或之前,或者结束日期是在月的第15天之后,那么这个月就算了。

例如:

代码语言:javascript
复制
Start Date   End Date   Output
----------   ---------  --------
1/5/2014     2/16/2014  2 months
1/17/2014    2/16/2014  1 month
1/16/2014    2/5/2014   0 months

我已经尝试过=DATEDIF(A2, B2, "M") + IF( DATEDIF(A2, B2, "MD")>=15, 1, 0),但是如果两个日期中的日期之间的距离超过15,这只会增加一个月。例如,如果开始日期是5/14/13-8/16/13,那么在这些日期之间有3个月的时间。然而,这两个日期之间的实际距离应该是4个月,根据我上面规定的条件。

我能修一下这个公式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-19 20:20:58

EDit:记账多年..。

代码语言:javascript
复制
=( (YEAR(B1)*12+MONTH(B1)) - (YEAR(A1)*12+MONTH(A1)) )    
           + ( IF(DAY(A1)<=15,1,0)+IF(DAY(B1)>15,1,0) ) 
票数 1
EN

Stack Overflow用户

发布于 2014-05-19 20:51:57

这里还有一个vba解决方案

代码语言:javascript
复制
Function date_diff_to_months(date1 As Date, date2 As Date) As Integer


   Dim y1 As Integer
   Dim y2 As Integer
   Dim d1 As Integer
   Dim d2 As Integer
   Dim m1 As Integer
   Dim m2 As Integer
   Dim m_diff As Integer
   Dim y_diff As Integer
   Dim month_adjustment As Integer
 
   y1 = Year(date1)
   y2 = Year(date2)
   m1 = Month(date1)
   m2 = Month(date2)
   d1 = Day(date1)
   d2 = Day(date2)
 
   m_diff = m2 - m1
   y_diff = (y2 - y1) * 12
 
   If (m_diff > 0 Or y_diff > 0) Then
       If (d1 <= 15 And d2 >= 15) Then
          month_adjustment = 1
       ElseIf (d1 >= 15 And d2 <= 15) Then
          month_adjustment = -1
       End If
   End If
 
   date_diff_to_months = m_diff + y_diff + month_adjustment
End Function
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23744895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档