我正在尝试在报告服务项目中将字符串格式化为小时。我试图找出给定日期(date1)和 16:30(标志着工作日结束)的小时之间的差异。简单地说:16:30 - 小时我使用下面的 DateDiff 公式:
= DateDiff(Dateinterval.Hour, Hour("16:30"), Hour(Fields!Date1.Value))
但是,当我预览报告时,上面的公式会引发错误。有人可以帮我找到正确的公式吗?
我正在尝试在报告服务项目中将字符串格式化为小时。我试图找出给定日期(date1)和 16:30(标志着工作日结束)的小时之间的差异。简单地说:16:30 - 小时我使用下面的 DateDiff 公式:
= DateDiff(Dateinterval.Hour, Hour("16:30"), Hour(Fields!Date1.Value))
但是,当我预览报告时,上面的公式会引发错误。有人可以帮我找到正确的公式吗?
正如其他评论所提到的,您需要在一个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)
最后两个表达式可以通过计算字段大大简化以计算时间差,但这个答案已经足够长了。
你可以看到这对我有用: