VBA_输入两个日期,并计算两日期之间的间隔

1 篇文章 0 订阅

输入两个日期,并计算两日期之间的间隔 

2018/1/1

2019/1/1

间隔:1年0月0日

​
Option Explicit

Sub timer()
    'define 日期为t1,t2,以及年月日的变量y,m,d
    Dim t1 As Date
    Dim t2 As Date
    Dim y1 As Integer
    Dim y2 As Integer
    Dim m1 As Integer
    Dim m2 As Integer
    Dim d1 As Integer
    Dim d2 As Integer
    
    Dim y As Integer
    Dim m As Integer
    Dim d As Integer
    
    '输入两个日期  如2019/8/11
    t1 = InputBox("please input time1", "DaoShuRi", "")
    t2 = InputBox("please input time2", "DaoShuRi", "")
    
    '设定t1先于t2
    If t1 > t2 Then
        t1 = t1 + t2
        t2 = t1 - t2
        t1 = t1 - t2
    End If
    
    '分别获取相应日期的年月日
    y1 = year(t1)
    y2 = year(t2)
    m1 = Month(t1)
    m2 = Month(t2)
    d1 = Day(t1)
    d2 = Day(t2)

    '先计算天数
    If d2 < d1 Then
        '天数不够减,需向月借一位,在对月份进行判断
        '如果为2,4,6,8,9,11,1 月,天数为31天
        '如果为5,7,10,12月,天数为30天
        '如果为3月,闰年 29天;平年28天
        
        '如果月份不够减,需要向年借一位
        If m2 - 1 < m1 Then
            
            '如果为5,7,10,12月,天数为30天
            If m2 = 5 Or m2 = 7 Or m2 = 10 Or m2 = 12 Then
                d = 30 + d2 - d1
            ElseIf m2 = 3 Then   '如果为3月
                '闰年 29天
                If runYear(y2) Then
                    d = 29 + d2 - d1
                   
                Else '平年28天
                    d = 28 + d2 - d1
                    
                End If
            Else
                d = 31 + d2 - d1
            End If
            
            '计算月份之差
            m = m2 + 12 - m1 - 1
            '计算年份之差
            y = y2 - y1 - 1
            
        Else
            '如果为5,7,10,12月,天数为30天
            If m2 = 5 Or m2 = 7 Or m2 = 10 Or m2 = 12 Then
                d = 30 + d2 - d1
            ElseIf m2 = 3 Then   '如果为3月
                '闰年 29天
                If runYear(y2) Then
                    d = 29 + d2 - d1
                   
                Else '平年28天
                    d = 28 + d2 - d1
                    
                End If
            Else
                d = 31 + d2 - d1
            End If
            
            '计算月份之差
            m = m2 - m1 - 1
            '计算年份之差
            y = y2 - y1
        End If
        
    Else
        '计算天数之差
        d = d2 - d1
        
        If m2 < m1 Then
            m = m2 + 12 - m1
            y = y2 - 1 - y1
        Else
            m = m2 - m1
            y = y2 - y1
        End If
        
    End If
    
    
    Debug.Print t1 & "  " & t2
    Debug.Print y & " year " & m & " month " & d & " day "

End Sub

'判断是否为闰年
Public Function runYear(year As Integer) As Boolean
    Dim f As Boolean
    If year > 0 Then
        If year Mod 400 = 0 Then
            f = True
        ElseIf year Mod 100 = 0 Then
            f = False
        ElseIf year Mod 4 = 0 Then
            f = True
        Else
            f = False
        End If
    End If
End Function



​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Baymax_wyl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值