Salesforce公式:营业时间公式不适用于营业时间以外的开始时间和营业时间内的结束时间

时间:2019-05-24 13:32:28

标签: salesforce formula

我遇到了一个障碍,我想知道这里的人是否可以帮助我。我正在寻找一个公式,该公式显示实际结束日期(BMCServiceDesk__Actual_End_Date__c)和实际开始日期(BMCServiceDesk__Actual_Start_Date__c)之间的营业时间。我找到了以下链接来帮助创建公式:

https://success.salesforce.com/answers?id=9063A000000iXTlQAM

Salesforce formula: Calculate business hours between two dates

我现在像下面的代码一样修改了公式。我们的工作时间为9小时(上午8点至下午5点),并且位于中央时区,因此我们在公式中使用“ 13:00:00”(格林尼治标准时间13:00:00 =格林尼治标准时间1 PM = 8 AM CT)。我们还希望将“小时”值四舍五入到小数点后两位。

ROUND(9*(
(5*FLOOR((DATEVALUE(BMCServiceDesk__Actual_Start_Date__c)- 
DATE(1996,01,01))/7) +
MIN(5,
MOD(DATEVALUE(BMCServiceDesk__Actual_Start_Date__c)-DATE(1996,01,01), 7) +
    MIN(1, 24/9*(MOD(BMCServiceDesk__Actual_Start_Date__c-DATETIMEVALUE('1996-01-01 13:00:00'), 1)))
))
-
(5*FLOOR((DATEVALUE(BMCServiceDesk__Actual_End_Date__c)-DATE(1996,01,01))/7) +
MIN(5,
MOD(DATEVALUE(BMCServiceDesk__Actual_End_Date__c)-DATE(1996,01,01), 7) +
    MIN(1, 24/9*(MOD(BMCServiceDesk__Actual_End_Date__c-DATETIMEVALUE('1996-01-01 13:00:00'), 1)))
))
),2)

在我的大多数测试案例中,这都按预期进行。当开始和结束时间都在工作时间之外或在周末时,该值将返回为“ 0.00”。当开始时间是在工作时间之内,并且无论结束时间是在工作时间之内还是之后,都将正确计算该值。

当开始时间在工作时间之外而结束时间在工作时间之内时,就会出现问题。例如,以“ 4/19/19 4:45 AM”开始和“ 4/19/19 9:00 AM”结束的更改应计算为“ 1.00”(从8 AM到9 AM);而是将其计算为“ -8.00”。看来,上午8:00之前的任何时间都显示为“ -8.00”,回到1:00 AM – 12:59 AM更正为“ 1.00”,甚至回到前一天的工作时间也是正确的。

在另一个示例中,如果一整天的变化以“ 4/18/19 4:45 AM”开始和“ 4/19/19 9:00 AM”结束,则应计算至“ 10.00”(一天9小时,第二天8 AM – 9 AM);而是计算为“ 1.00”。

任何人都可以帮助修改以上公式,以获取工作时间以外的开始时间和工作时间内的结束时间的正确工作时间计算吗?

1 个答案:

答案 0 :(得分:0)

尝试一下

FLOOR((BMCServiceDesk__Actual_End_Date__c - BMCServiceDesk__Actual_Start_Date__c)/7)*5*9 + 
MIN(5,FLOOR(MOD((BMCServiceDesk__Actual_End_Date__c - BMCServiceDesk__Actual_Start_Date__c),7)))*9+

IF((TIMEVALUE(BMCServiceDesk__Actual_End_Date__c)-TIMEVALUE("12:00:00.00"))/(3600*1000)>16,0,MIN(9,(TIMEVALUE(BMCServiceDesk__Actual_End_Date__c)-TIMEVALUE("12:00:00.00"))/(3600*1000))) - IF((TIMEVALUE(BMCServiceDesk__Actual_Start_Date__c)-TIMEVALUE("12:00:00.00"))/(3600*1000)>16,0,MIN(9,(TIMEVALUE(BMCServiceDesk__Actual_Start_Date__c)-TIMEVALUE("12:00:00.00"))/(3600*1000)))