我正在尝试将字符串格式化为报表服务项目中的一小时。我试图找出给定日期(date1)和16:30(标志着工作日结束)的小时之间的差异。简单地说:16:30 - 小时我正在使用下面的DateDiff公式:
= DateDiff(Dateinterval.Hour, Hour("16:30"), Hour(Fields!Date1.Value))
但是,在我预览报表时,上面的公式会引发错误。有人可以帮助我找到正确的公式吗?
答案 0 :(得分:0)
正如其他评论所提到的,您需要比较DateDiff
表达式中的两个日期时间。
要执行此操作,您需要第一个日期,即 16:30 时间,以第二个日期为基础。这样做的一种方法是:
=DateDiff(DateInterval.Hour
, CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
, Fields!Date1.Value)
基于此,您可以轻松地将其增强为仅返回日期与时间差异的差异>的 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)
使用计算字段可以大大简化最后两个表达式,以计算时差,但这个答案已经足够长了。
你可以看到这对我有用: