【问题标题】:Excel date/time differenceExcel 日期/时间差
【发布时间】:2013-01-30 17:24:09
【问题描述】:

我想计算自指定日期和时间以来的当前时间。

如果指定的数据是: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 秒更新一次而不进行交互?

【问题讨论】:

  • 你应该把它分成两个问题,以避免不同部分的答案冲突

标签: excel worksheet-function


【解决方案1】:

您不能使用YEAR 函数来获取年份差异,因为这将在 2012 年 12 月 31 日和 2013 年 1 月 1 日之间给出 1 年,而此时只有一天.....

....类似地,您可能会遇到 MONTH 和 DAY 的问题(例如,MONTH 总是返回 1 到 12 之间的数字,而在这种情况下,您只会期望 0 到 11 之间的数字)

按照贾斯汀的建议,尝试 DATEDIF 前 3 个,然后尝试 HOURMINUTESECOND

假设 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)

将所有单元格格式化为通用格式

由于月/年长度不同,您可能会遇到一些差异......

【讨论】:

  • for =HOUR(B2-A2) =MINUTE(B2-A2) =SECOND(B2-A2) 我得到#NUM!
  • 如果你得到#NUM!错误意味着日期是错误的,我假设 B2 晚于 A2,如果不切换到 =HOUR(A2-B2)
【解决方案2】:

使用A5 = Year(A1)-Year(A2)

使用

Year(...) Month(...) Day(...) Hour(...) Minute(...) Second(...)

有关基于计时器创建自更新工作表的更多详细信息,请查看这些two posts 并设置计时器以执行Worksheet.Calculate 方法。

【讨论】:

  • 我用 a1=30/01/2013 16:44:00 和 a2 = 30/01/2013 18:34:35 试过这个,我得到(第 0 天)(第 2 小时)(分钟-10)(seconds 35) 我将如何解决这个问题?
【解决方案3】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2013-02-20
    相关资源
    最近更新 更多