计算sugarCRM中两个字段之间的天数

问题描述 投票:0回答:2

如何使用sugarCRM studio中的“公式生成器”计算同一模块的两个日期字段之间的天数,而不计算周末(周六和周日)。

sugarcrm
2个回答
0
投票

初步评论

据我所知,Sugar Logic 没有计算日期范围内天数的功能。 但是我们可以使用现有的 Sugar 函数来计算它,如下所示:

add(1,subtract(daysUntil(addDays($date_end,365000)),daysUntil(addDays($date_start,365000))))

这将返回从 $date_start 到 $date_end 的跨度,计算所有天,包括开始日期和结束日期, 因此 2017-01-01 到 2017-01-01 的跨度将返回 1 而不是 0。

备注:

  • 这不处理任何这些字段为空的特殊情况。
  • 如果想直接显示该公式的结果,请将其包装在floor()中以显示为整数,无需
    .000000

解决方案

由于 Sugar Logic 也似乎提供了任何 modulo 函数和公式作用域变量, 您想要的结果公式(仅计算 Mo-Fr)“紧凑”为:

floor(add(0.5,
  add(
    multiply(floor(divide(add(1,subtract(daysUntil(addDays($date_end,365000)),daysUntil(addDays($date_start,365000)))),7)),5)
  ,
    add(
      min(
        max(0,subtract(6,ifElse(equal(dayofweek($date_start),0),7,dayofweek($date_start))))
      ,
        subtract(
          add(1,subtract(daysUntil(addDays($date_end,365000)),daysUntil(addDays($date_start,365000))))
        ,
          multiply(floor(divide(add(1,subtract(daysUntil(addDays($date_end,365000)),daysUntil(addDays($date_start,365000)))),7)),7)
        )
      )
    ,
      max(
        0,
        subtract(
          subtract(
            add(1,subtract(daysUntil(addDays($date_end,365000)),daysUntil(addDays($date_start,365000))))
          ,
            multiply(floor(divide(add(1,subtract(daysUntil(addDays($date_end,365000)),daysUntil(addDays($date_start,365000)))),7)),7)
          )
        ,
          subtract(8,ifElse(equal(dayofweek($date_start),0),7,dayofweek($date_start)))
        )
      )
    )
  )
))

备注:

  • 上面的公式不处理结束日期之后的开始日期,您可以使用
    if()
    isAfter()
  • 来捕获此类情况
  • 节假日等根本不考虑,所以这将仅计算实际工作日

0
投票

abs(subtract(daysUntil($datefieldA),daysUntil($datefieldB)))

	
© www.soinside.com 2019 - 2024. All rights reserved.