0

我正在尝试在报告服务项目中将字符串格式化为小时。我试图找出给定日期(date1)和 16:30(标志着工作日结束)的小时之间的差异。简单地说:16:30 - 小时我使用下面的 DateDiff 公式:

= DateDiff(Dateinterval.Hour, Hour("16:30"), Hour(Fields!Date1.Value))

但是,当我预览报告时,上面的公式会引发错误。有人可以帮我找到正确的公式吗?

4

1 回答 1

0

正如其他评论所提到的,您需要在一个DateDiff表达式中比较两个 DateTimes。

为此,您需要第一个日期,即您的16:30时间,以第二个日期为基础。这样做的一种方法是:

=DateDiff(DateInterval.Hour
    , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
    , Fields!Date1.Value)

基于此,您可以轻松地对其进行增强,以仅返回具有 time > 16:30的日期差异的差异:

=IIf(DateDiff(DateInterval.Hour
        , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
        , Fields!Date1.Value) > 0
    , DateDiff(DateInterval.Hour
        , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
        , Fields!Date1.Value)
    , 0)

您甚至可以将差异以分钟为单位格式化为HH:mm

=CStr(CInt(IIf(DateDiff(DateInterval.Minute
        , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
        , Fields!Date1.Value) > 0
    , DateDiff(DateInterval.Minute
        , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
        , Fields!Date1.Value)
    , 0) / 60))
    & ":"
    & CStr(IIf(DateDiff(DateInterval.Minute
            , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
            , Fields!Date1.Value) > 0
        , DateDiff(DateInterval.Minute
            , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
            , Fields!Date1.Value)
        , 0) mod 60)

最后两个表达式可以通过计算字段大大简化以计算时间差,但这个答案已经足够长了。

你可以看到这对我有用:

在此处输入图像描述

于 2013-09-20T09:31:21.110 回答