我正在做一份涉及图尔的报告。我有一列由tour_start_time 数据字段填充,另一列由tour_end_time 填充。然后我有一个名为“总时间”的专栏。总时间列需要以 hh:mm 格式告诉我tour_start_time 和tour_end_time 之间的区别是什么。因此,如果tour_start_time返回5:00并且tour_end_time返回5:06,那么总时间应该是0:06。我似乎无法理解这个和 DateDiff 的东西,我已经阅读了所有参考参数,这不是我正在使用的。我需要表格中的数据。我尝试过这个表达:
=DateDiff(minute,Fields!tour_start_time,Fields!tour_end_time)
但这不起作用,我尝试过的任何变体也不起作用。我知道我错过了一些东西,因为我对此不熟悉,所以很抱歉,如果这是一个愚蠢的问题,但我需要有人可以向我解释它,或者至少给我另一个功能来尝试。
假设您的列实际上是 DateTime 数据类型,您的
DateDiff
表达式应如下所示:
=DateDiff(DateInterval.Minute, Fields!tour_start_time.Value, Fields!tour_end_time.Value)
或
=DateDiff("n", Fields!tour_start_time.Value, Fields!tour_end_time.Value)
VB.NET
DateDiff
需要 DateInterval
参数;您可以指定枚举器成员 (DateInterval.Minute
) 或其字符串表示形式(即 "n"
表示分钟)。
这只会返回以分钟为单位的差异的整数值;听起来您需要将其更改为 HH:mm 字符串。在我的脑海中,最简单的方法是使用报告中的一些自定义代码,该代码将此整数值作为参数并基于此构造字符串。如果您需要这部分的更多信息,请告诉我。
如果您想获取经过的小时、分钟和秒的持续时间,例如:
HH:mm:ss
,那么您可以使用如下所示的内容:
Format(
Floor(DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) / (60*60)),
"00")
+ ":" +
Format(
Floor((DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) -
Floor(DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) / (60*60))*(60*60)) / 60),
"00")
+ ":" +
Format(
(DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) -
Floor(DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) / (60*60))*(60*60)) Mod 60,
"00")
如果你可以使用临时变量,这会更容易理解,但由于一切都必须一次性完成,所以必须是上面的。 然而,分解它是这样的:
Format(
Floor(DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) / (60*60)),
"00")
为您提供更新时的最小值和最大值之间的秒数,然后除以 60 得到分钟,再除以 60 得到小时。
Format(
Floor((DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) -
Floor(DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) / (60*60))*(60*60)) / 60),
"00")
给出总秒数减去小时部分,再乘以分钟和小时,然后再除以小时。
Format(
(DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) -
Floor(DateDiff(DateInterval.Second,
Min(Fields!Updated.Value),
Max(Fields!Updated.Value)
) / (60*60))*(60*60)) Mod 60,
"00")
为您提供总秒数减去适合此计算的小时数的余数。