当前位置: 首页 > 知识库问答 >
问题:

两个日期在月数和天数上的差异SQL

宋臻
2023-03-14

为了计算月租金,我试图显示两个日期之间的差异,我期望月和日的确切数量,因为合同是“每月”的,所以如果是2月、3月或4月,每月的金额是固定的。比如说:Strat_D=05-Aug-2020 End_D=20-Sept-2020我用这个代码来计算天数:

DateDiff("d",[Start_D],[End_D])

输出为:45,但预期为:1个月

如果我使用:

DateDiff("m",[Start_D],[End_D])

输出为:1,但预期:1.5

提前谢谢

共有1个答案

慕飞章
2023-03-14

由于月份的天数不同,您必须按天计算以尽可能接近,因为没有确切的值(一个月内或7月/8月或12月/1月内除外):

' Returns the decimal count of months between Date1 and Date2.
'
' Rounds by default to two decimals, as more decimals has no meaning
' due to the varying count of days of a month.
' Optionally, don't round, by setting Round2 to False.
'
' 2017-01-24. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function TotalMonths( _
    ByVal Date1 As Date, _
    ByVal Date2 As Date, _
    Optional Round2 As Boolean = True) _
    As Double
    
    Dim Months      As Double
    Dim Part1       As Double
    Dim Part2       As Double
    Dim Fraction    As Double
    Dim Result      As Double
    
    Months = DateDiff("m", Date1, Date2)
    Part1 = (Day(Date1) - 1) / DaysInMonth(Date1)
    Part2 = (Day(Date2) - 1) / DaysInMonth(Date2)
    
    If Round2 = True Then
        ' Round to two decimals.
        Fraction = (-Part1 + Part2) * 100
        Result = Months + Int(Fraction + 0.5) / 100
    Else
        Result = Months - Part1 + Part2
    End If
    
    TotalMonths = Result
    
End Function


' Returns the count of days of the month of Date1.
'
' 2016-02-14. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function DaysInMonth( _
    ByVal Date1 As Date) _
    As Integer

    Const MaxDateValue  As Date = #12/31/9999#
    Const MaxDayValue   As Integer = 31

    Dim Days    As Integer

    If DateDiff("m", Date1, MaxDateValue) = 0 Then
        Days = MaxDayValue
    Else
        Days = Day(DateSerial(Year(Date1), Month(Date1) + 1, 0))
    End If

    DaysInMonth = Days

End Function

结果:

? TotalMonths(#2020/08/05#, #2020/09/20#)
 1.5

? TotalMonths(#2020/11/15#, #2021/02/15#)
 3.03 
 类似资料:
  • 问题内容: 我想得到两个Java Date对象之间的区别。我使用了Joda-Time库。但是问题是我得到的天数差异大于实际的天数差异。 这是我的代码段: 这是我的输出: 在这里,为什么将“ 06/22/2010”设为1月22日?有人遇到类似的问题吗? 帮我朋友..提前感谢.. 问题答案: 月份是MM 在您的情况下: DateFormat formatter = new SimpleDateForm

  • 我想计算2个月之间的差异,我不想考虑一个月是30天,并且以毫秒的时间来转换它们,我不想使用像焦达这样的库,我也找到了一个使用LoalDead的解决方案,但是我使用的是java 7。我寻找我的问题的答案,但找不到任何答案,我尝试了许多方法,我尝试创建一个日历,并以毫秒为单位传递我的两个日期之间的差异,但如果我尝试获取15/04和15/5之间的差异,我将得到30天,而不是1个月,下面是代码 我可以用什

  • 问题内容: 我需要找到两个日期之间的天数:一个是来自报表,另一个是当前日期。我的片段: 这是一个私有方法,并且today是Date对象,仅供您说明。我关注了Java论坛中的两篇文章Thread 1 / Thread 2。 它在独立程序中可以正常工作,尽管当我将其包含在逻辑中以从报告中读取时,我会在值上获得不同寻常的区别。 为什么会发生,如何解决? 编辑: 与实际天数相比,我得到的天数更多。 问题答

  • 问题内容: 我需要获取MySQL上几个日期中包含的天数。 例如: 入住日期是 离开日期 当天差是3 问题答案: 怎么样 DATEDIFF 功能? 引用手册页面: DATEDIFF()返回expr1 – expr2,表示为从一个日期到另一个日期的天数。expr1和expr2是日期或日期和时间表达式。在计算中仅使用值的日期部分 就您而言,您可以使用: 但是请注意,日期应写为,而不是您发布的日期。

  • 我有两次约会。一个是以YYYYMMDD格式从其他应用程序的表中检索的,第二个日期是本地时间,我需要这两个日期之间的天数/月/年。 我试过了 但这给了我一些乱七八糟的数字。 变量$t=Fri Dec31 00:00:00 9999 变量$今天=Wed Feb19 14:40:55 2020 产出:25182094888 有什么想法吗?提前谢谢。

  • 我需要得到以下两个日期之间的差异。两个日期都是字符串格式。