为什么此公式代码在未来几天(日期差异)不起作用?

Why this formula code is to be not working on future days (in date difference)?

我有公式可以计算两个 Date/time 字段之间的日期差异(以小时为单位),但我只计算了一天中的小时数是在上午 9 点 - 9 点PM即每天12小时只有公式计算出来,计算出来的天数是工作日而不是一周周末。

在这里我将过去和未来的日子与 NOW() 值进行比较,未来的日子将用负号显示结果 answer.So 作为上面的声明它应该正确提供输出(仅过去)。

如果我选择的计算日期是星期六和星期日这样的周末,它会给出前一周的时间(如果日期差是一周)+ NOW() 的时间值到计算从上午 9 点开始,如果周末要小以与日期差异进行比较(就像 NOW() 是星期一,计算日期是星期日的昨天,星期六就像天差是 2、3)在一周内它是只显示从上午9点开始计算的NOW()值的值 我的代码如下,

IF((MOD(DATEVALUE( Calculating_Date__c )-DATE(1996,01,01), 7) < 5),
((ROUND(12*(
(5*FLOOR((TODAY()-DATE(1996,01,01))/7) +
MIN(5, 
    MOD(TODAY()-DATE(1996,01,01), 7) +
    MIN(1, 24/12*(MOD(NOW()-DATETIMEVALUE('1996-01-01 12:00:00'), 1)))
))
-
(5*FLOOR((DATEVALUE( Calculating_Date__c )-DATE(1996,01,01))/7) +
MIN(5, 
    MOD(DATEVALUE( Calculating_Date__c )-DATE(1996,01,01), 7) +
    MIN(1, 24/12*(MOD( Calculating_Date__c -DATETIMEVALUE('1996-01-01 12:00:00'), 1)))
))
), 0))-
(IF((NOW() > Calculating_Date__c),
(+
IF( ((21 > (VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2)))) || (9 < (VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2))))) , 
 (VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2)) - 9), Null)),
 (-
IF( ((21 > (VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2)))) || (9 < (VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2))))) , 
 (VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2)) - 9), Null))))),

 (IF((NOW() >  Calculating_Date__c ),
(((
 (NOW() -  Calculating_Date__c ) * 5 -
 (MOD(DATEVALUE(Calculating_Date__c) - DATE(1970,1,4),7) - MOD(TODAY() - DATE(1970,1,4),7)) * 2
) / 7 -
IF(MOD(TODAY() - DATE(1970,1,4),7) = 6,1,0) -
IF(MOD( DATEVALUE(Calculating_Date__c) - DATE(1970,1,4),7) = 0,1,0))*12
+
(VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2)) - 9)),
((
 (NOW() -  Calculating_Date__c ) * 5 -
 (MOD(DATEVALUE(Calculating_Date__c) - DATE(1970,1,4),7) - MOD(TODAY() - DATE(1970,1,4),7)) * 2
) / 7 -
IF(MOD(TODAY() - DATE(1970,1,4),7) = 6,1,0) -
IF(MOD( DATEVALUE(Calculating_Date__c) - DATE(1970,1,4),7) = 0,1,0)*12
-
(VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2)) - 9)))))

所以这里我只得到过去几天的输出,而不是未来几天的输出。即如果 selected 日期从 NOW() 的值过去,它会正确提供输出,就像如果 select 计算日期的值是 10/9/2016 那么它会正确提供值比如 77 小时的输出。

那么如果我 select 未来的一天,比如 2016 年 10 月 23 日,那么它提供的输出为 -20 小时,但正确的输出是 -60 小时,所以公式以错误的方式提供输出仅在未来的日子里,所以这就是问题,我希望帮助纠正这个问题,并在过去和未来的日子里提供正确的输出。所以请帮助我解决这个问题并提前感谢答案。

我的问题的答案如下,

IF((MOD(DATEVALUE(Calculating_Date__c)-DATE(1996,01,01), 7) < 5),

 (IF((NOW() > Calculating_Date__c),
 ((ROUND(12*(
(5*FLOOR((TODAY()-DATE(1996,01,01))/7) +
MIN(5, 
    MOD(TODAY()-DATE(1996,01,01), 7) +
    MIN(1, 24/12*(MOD(NOW()-DATETIMEVALUE('1996-01-01 12:00:00'), 1)))
))
-
(5*FLOOR((DATEVALUE(Calculating_Date__c)-DATE(1996,01,01))/7) +
MIN(5, 
    MOD(DATEVALUE(Calculating_Date__c )-DATE(1996,01,01), 7) +
    MIN(1, 24/12*(MOD(Calculating_Date__c -DATETIMEVALUE('1996-01-01 12:00:00'), 1)))
))
), 0))
+
IF( (21 > (VALUE(MID(RIGHT((TEXT(NOW() + 0.2291)),9),0,2)))) || (9 < (VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2)))) , 
 (VALUE(MID(RIGHT((TEXT(NOW() + 0.2291)),9),0,2)) - 9),0 )),
((ROUND(12*(
(5*FLOOR((TODAY()-DATE(1996,01,01))/7) +
MIN(5, 
    MOD(TODAY()-DATE(1996,01,01), 7) +
    MIN(1, 24/12*(MOD(NOW()-DATETIMEVALUE('1996-01-01 12:00:00'), 1)))
))
-
(5*FLOOR((DATEVALUE(Calculating_Date__c )-DATE(1996,01,01))/7) +
MIN(5, 
    MOD(DATEVALUE(Calculating_Date__c )-DATE(1996,01,01), 7) +
    MIN(1, 24/12*(MOD(Calculating_Date__c -DATETIMEVALUE('1996-01-01 12:00:00'), 1)))
))
), 0))
-
IF( (21 > (VALUE(MID(RIGHT((TEXT(NOW() + 0.2291)),9),0,2)))) || (9 < (VALUE(MID(RIGHT((TEXT(NOW() + 0.2291)),9),0,2)))) , 
 (VALUE(MID(RIGHT((TEXT(NOW() + 0.2291)),9),0,2)) - 9), 0)))),

IF((NOW() >  Calculating_Date__c ),
(((
 (NOW() -  Calculating_Date__c ) * 5 -
 (MOD(DATEVALUE(Calculating_Date__c) - DATE(1970,1,4),7) - MOD(TODAY() - DATE(1970,1,4),7)) * 2
) / 7 -
IF(MOD(TODAY() - DATE(1970,1,4),7) = 6,1,0) -
IF(MOD( DATEVALUE(Calculating_Date__c) - DATE(1970,1,4),7) = 0,1,0))*12
+
(VALUE(MID(RIGHT((TEXT(NOW() + 0.2291)),9),0,2)) - 9)),
((
 (NOW() -  Calculating_Date__c ) * 5 -
 (MOD(DATEVALUE(Calculating_Date__c) - DATE(1970,1,4),7) - MOD(TODAY() - DATE(1970,1,4),7)) * 2
) / 7 -
IF(MOD(TODAY() - DATE(1970,1,4),7) = 6,1,0) -
IF(MOD( DATEVALUE(Calculating_Date__c) - DATE(1970,1,4),7) = 0,1,0))*12
-
(VALUE(MID(RIGHT((TEXT(  NOW() + 0.2291)),9),0,2)) - 9)))

这里我只是统一取值是根据最初方式的过去和未来天数条件下进来的日期差的值。

并且还提供了 if 的值,如果周六和周日的值保存了先前的值,也将在 if class 的 else 部分给出,如上面的公式所示。

(注:如果公式只是为了计算出日期的小时差值的近似方式,不以时间为准)。谢谢 Mohan(特别感谢 Dutch.L 先生为查找错误提供了一些想法)。