为什么此公式代码在以后的日子(日期差)不起作用?

莫汉·拉杰(MohanRaj)

我有一个要计算两个日期/时间字段之间的日期差(小时的间隔)的公式,但是我只计算了一天中的小时数是9 AM-9 PM,即每天仅12个小时计算的公式和计算的天数是工作日,而不是一周中的周末。

在这里,我将过去和将来的天数与NOW()值进行了比较,未来的日子将用负号回答来表示结果。因此,如上所示,它应该正确地提供输出(仅过去)。

如果我选择了“计算日期”,则是像星期六和星期日这样的一周结束日,它是前一周的时间(如果日期差是周)+ NOW()的时间值从9 AM和如果周末要小一些以与日期差进行比较(就像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)))))

因此,这里我仅获得过去几天的输出,而不会得到未来几天的输出。例如,如果选择日期要从NOW()的值过去,则正确提供输出,如选择“计算日期”的值为10/9/2016,则提供正确的值,例如77小时输出。

然后,如果我选择类似10/23/2016的未来日期,则它提供的输出为-20小时,但正确的输出为-60小时,因此该公式仅在以后的几天中以错误的方式提供了输出,因此问题我希望得到帮助以纠正该问题,并在过去和将来提供正确的输出。因此,请帮助我解决此问题,并提前感谢您的答复。

莫汉·拉杰(MohanRaj)

在这里,对我所有人的回答如下:

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类别的else部分中给出,如上面的公式中所述。

(请注意:如果仅以近似方式计算公式以小时为单位的日期差的值,而不是根据被认为是准确的时间来计算公式。)谢谢Mohan(特别感谢Dutch.L先生对发现bug提出了一些想法)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章