输入两个日期,并计算两日期之间的间隔
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