輸入兩個日期,並計算兩日期之間的間隔
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