VBA_輸入兩個日期,並計算兩日期之間的間隔

輸入兩個日期,並計算兩日期之間的間隔 

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



​

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章