我想确定自指定日期和时间以来的当前时间。
如果指定的数据是:19/01/2013 16:44:00
现在时间是:19/01/2013 16:45:00
差异是0年0个月0天0小时1分0秒
这可以通过获取当前时间并减去之前的时间并将其格式化来轻松完成,但这很难处理数据,因此我希望将每个日期/时间段分解为自己的单元格
假设单元格A1具有前一个时间,单元格A2具有当前时间
细胞a5通过f5将包含0年0个月0天0小时1分0秒
关于这个问题的第二个注释是否可以强制=NOW()
通过VBA每隔x秒更新一次而不进行交互?
答案 0 :(得分:3)
您不能使用YEAR
功能来获得年份差异,因为这将在2012年12月31日至2013年1月1日期间提供1年,当时只有一天......
....类似地,你可以遇到MONTH和DAY的问题(例如,MONTH总是返回1到12之间的数字,而在这种情况下你只能期望0到11之间的数字)
尝试DATEDIF
代表前3个HOUR
,MINUTE
,SECOND
,正如贾斯汀建议的那样
假设A2中的开始日期/时间和B2中的结束日期/时间分别针对年,月,日,小时,分钟和秒来尝试这些公式
=DATEDIF(A2,B2-(MOD(A2,1)>MOD(B2,1)),"y")
=DATEDIF(A2,B2-(MOD(A2,1)>MOD(B2,1)),"ym")
=DATEDIF(A2,B2-(MOD(A2,1)>MOD(B2,1)),"md")
=HOUR(B2-A2)
=MINUTE(B2-A2)
=SECOND(B2-A2)
将所有单元格格式化为常规
由于月/年长度变化,您可能会出现一些差异......
答案 1 :(得分:1)
使用A5 = Year(A1)-Year(A2)
等
使用
Year(...)
Month(...)
Day(...)
Hour(...)
Minute(...)
Second(...)
有关基于计时器创建自我更新表的更多详细信息,请查看这些two posts并设置计时器以执行Worksheet.Calculate
方法。
答案 2 :(得分:0)
Private Sub CommandButton1_Click()
DoDateA
End Sub
Sub DoDateA()
Dim D1 As Date, D2 As Date, DC As Date, DS As Date
Dim CA: CA = Array("", "yyyy", "m", "d", "h", "n", "s", "s")
Dim Va%(7), Da(7) As Date, Ci%
D1 = Now + Rnd() * 420 ' vary the * factors for range of dates
D2 = Now + Rnd() * 156
If D1 > D2 Then
[b4] = "Larger"
Else
[b4] = " smaller"
DS = D1
D1 = D2
D2 = DS
End If
[d4] = D1
[e4] = D2
DC = D2
For Ci = 1 To 6
Va(Ci) = DateDiff(CA(Ci), DC, D1)
DC = DateAdd(CA(Ci), Va(Ci), DC)
Va(Ci + 1) = DateDiff(CA(Ci + 1), DC, D1)
If Va(Ci + 1) < 0 Then ' added too much
Va(Ci) = Va(Ci) - 1
DC = DateAdd(CA(Ci), -1, DC)
Cells(9, Ci + 3) = Va(Ci + 1)
Cells(8, Ci + 3) = Format(DC, "yyyy:mm:dd hh:mm:ss")
End If
Da(Ci) = DC
Cells(5, Ci + 3) = CA(Ci)
Cells(6, Ci + 3) = Va(Ci)
Cells(7, Ci + 3) = Format(Da(Ci), "yyyy:mm:dd hh:mm:ss")
Cells(10, Ci + 3) = DateDiff(CA(Ci), D2, D1)
Next Ci
End Sub