【问题标题】:datediff function to compare minute rangedatediff 函数比较分钟范围
【发布时间】:2017-03-15 20:21:02
【问题描述】:

我将工作表中的所有数据复制到变量数组中。第 1 列的时间戳如下所示。

2017 年 3 月 2 日星期四 01:14:28 EST

我想在 1 分钟的时间内处理所有行。我正在使用 datediff 函数来找出分钟的差异。但不知何故,它没有按预期工作。 这是代码。

    For i = 1 To UBound(vBaseArray)
          dSavedDate = convertDate(vBaseArray(i,1)) 'function to convert string to date
.....          some code
          For j = i To UBound(vBaseArray) 'function to convert string to date

               If DateDiff("n", dSearchDate, dSavedDate) >= 1 And DateDiff("n", dSearchDate, dSavedDate) <= 2 Then

                 ----some code

但结果并不如预期 如果 dSavedDate 是 Thu Mar 02 01:14:28 EST 2017 那么 if 语句在时间戳后返回我

2017 年 3 月 2 日星期四 01:12:24 EST

2017 年 3 月 2 日星期四 01:12:44 EST

2017 年 3 月 2 日星期四 01:12:40 EST

2017 年 3 月 2 日星期四 00:47:12 EST

而我想要 dSavedDate >= 1 分钟的时间戳

我做错了什么?

【问题讨论】:

  • dSavedDate 的值是“Thu Mar 02 01:14:28 EST 2017”还是 vBaseArray(i,1) 的值?如果不是dSavedDate,那么dSavedDate 的值是什么? dSearchDate 的值是多少?您的代码中是否有任何 On Error 语句可能会掩盖错误?
  • 是的,dSavedDate 的值是 Thu Mar 02 01:14:28 EST 2017。dSearchDate 具有第 1 列中符合特定条件的所有时间戳的值。主要是我在下面给出的 4 个值。但显然它们是不正确的
  • 如果 dSavedDate 是 Thu Mar 02 01:14:28 EST 2017,那么 convertDate 没有用 - 如果它是我看到的作为对您其他问题之一的答案的功能,它应该返回一个日期,而不是您显示的值。

标签: vba range datediff


【解决方案1】:

Date 变量在内部表示为Double,时间部分为小数点右侧的小数天。您可以直接减去它们并使用增量来查看它们是否在一分钟内:

Public Function WithinOneMinute(first As Date, second As Date) As Boolean
    Const ONE_MINUTE As Double = 1 / 24 / 60
    Dim difference As Date
    difference = Abs(first - second)
    WithinOneMinute = difference <= ONE_MINUTE
End Function

然后你可以像这样在你的循环中调用它:

    For i = 1 To UBound(vBaseArray)
      dSavedDate = convertDate(vBaseArray(i, 1))
      For j = i To UBound(vBaseArray)
           If Not WithinOneMinute(dSearchDate, dSavedDate) Then

【讨论】:

  • 一个小问题 - OP 想要 >=1 和
  • 不会允许任何东西 1 吗?
  • @YowE3K - 嗯? “我想在 1 分钟的时间内处理所有行。”我实际上认为 没有 Not 的原始版本可能是 OP 想要的,但现在我将问题的顶部与底部进行了比较......
  • 是的 - 这个问题有点令人困惑 - 还有声明“我想要 dSavedDate >= 1 分钟的时间戳”。代码肯定是在尝试 >=1 和 dSavedDate 之后 1 分钟后的一分钟内的代码。
  • @YowE3K - 如果是这样,只需拨打Abs 电话即可。我们会看看 OP 是否想插话。
猜你喜欢
  • 1970-01-01
  • 2010-09-13
  • 2017-07-02
  • 2011-08-05
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多