我有一个要计算两个日期/时间字段之间的日期差(小时的间隔)的公式,但是我只计算了一天中的小时数是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小时,因此该公式仅在以后的几天中以错误的方式提供了输出,因此问题我希望得到帮助以纠正该问题,并在过去和将来提供正确的输出。因此,请帮助我解决此问题,并提前感谢您的答复。
在这里,对我所有人的回答如下:
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] 删除。
我来说两句