我可以使用如下公式轻松计算导致的年龄(以分钟为单位):
ROUND((NOW()-CreatedDate)*1440,0)
Run Code Online (Sandbox Code Playgroud)
但是,我只想计算该时间跨度的营业时间(实际上是分钟).我想在Salesforce公式(不是顶点触发器)中执行此操作.我在这里和这里找到了一些灵感.我对此解决方案的优先级:
想要算一下工作日的数量?这个公式在873个编译字符中进行比较,相比之下Salesforce Support 示例中建议的模板中的1,685个(有些人抱怨在将较大模板与其他代码组合时超过5,000个字符限制).
(
5*FLOOR((TODAY()-DATE(1996,01,01))/7) +
MIN(5, MOD(TODAY()-DATE(1996,01,01), 7))
) - (
5*FLOOR((DATEVALUE(CreatedDate)-DATE(1996,01,01))/7) +
MIN(5, MOD(DATEVALUE(CreatedDate)-DATE(1996,01,01), 7))
)
Run Code Online (Sandbox Code Playgroud)
阅读我的答案,了解它是如何工作的,以及如果您需要它甚至可以计算营业时间.
我通过计算两个不同日期的参考点两次的工作日来解决这个问题,然后减去它们之间的工作日数,包括小数部分,这样我就可以轻松地将其转换为营业时间或营业时间.通过在过去的星期一(例如1996年1月1日)选择参考点作为业务开始,我可以更容易地计算数学并解决Salesforce公式的限制.
举个例子,假设我有两个日期,D1 ="5/10/2012 12:49 PM"和D2 ="6/20/2012 14:19 PM".我的工作周是5天/周x 10小时/天.我随意选择参考日期为"2012-04-02 13:00:00".从参考日算起,到D1有28.682个工作日,到D2有57.832个工作日.减去我给出了D2和D1之间29.150个工作日的正确答案.
以下是计算营业时间内任何Salesforce记录的年龄的公式(从格林威治标准时间1300开始的11小时):
ROUND(11*(
(5*FLOOR((TODAY()-DATE(1996,01,01))/7) +
MIN(5,
MOD(TODAY()-DATE(1996,01,01), 7) +
MIN(1, 24/11*(MOD(NOW()-DATETIMEVALUE('1996-01-01 13:00:00'), 1)))
))
-
(5*FLOOR((DATEVALUE(CreatedDate)-DATE(1996,01,01))/7) +
MIN(5,
MOD(DATEVALUE(CreatedDate)-DATE(1996,01,01), 7) +
MIN(1, 24/11*(MOD(CreatedDate-DATETIMEVALUE('1996-01-01 13:00:00'), 1)))
))
), 0)
Run Code Online (Sandbox Code Playgroud)
让我们分解吧.我正在计算两个工作日时间.对于每个我计算完整工作周的数量,在最后一个部分周内的完整工作日,以及在最后一个部分日内的小数营业时间,然后将其全部添加.
(5*FLOOR((TODAY()-DATE(1996,01,01))/7)
Run Code Online (Sandbox Code Playgroud)
计算自参考点(必须是星期一)以来的整周数,并为每个工作日计算5个工作日.
MOD(TODAY()-DATE(1996,01,01), 7)
Run Code Online (Sandbox Code Playgroud)
计算最后一个部分周的额外完整天数,并为每个部分计算1天.
24/11*(MOD(CreatedDate-DATETIMEVALUE('1996-01-01 13:00:00'), 1))
Run Code Online (Sandbox Code Playgroud)
计算自业务开始以来已过去的一天的部分.模数1仅给出小数部分.乘以24/11将其从24小时工作日转换为11小时工作日(可以使用8而不是11小时,每天工作8小时).
MIN(1, ...)
Run Code Online (Sandbox Code Playgroud)
确保我们永远不会在一个完整的工作日内为小部件提供信贷,这可能很容易发生在傍晚.
MIN(5, ...)
Run Code Online (Sandbox Code Playgroud)
确保我们永远不会超过5个完整工作日的部分工作周,这可能很容易发生在周六或周日.
ROUND(11*(...), 0)
Run Code Online (Sandbox Code Playgroud)
将此信息从工作日转换为整个工作时间.在工作日(包括小数部分)将其关闭.
结束思路:
| 归档时间: |
|
| 查看次数: |
23088 次 |
| 最近记录: |