2016-10-18 2 views
0

J'ai la formule pour calculer la différence de date (interms d'heure) entre deux champs date/heure, mais j'ai seulement calculé le nombre d'heures dans un jour doit être dans le 9 heures-21 PM soit 12 heures par jour seulement la formule est calculée et les jours calculés sont les jours de la semaine et non les fins de semaine dans une semaine. Par ici, j'ai séparé le passé et les jours futurs par rapport à la valeur NOW() les jours futurs doivent afficher le résultat avec la réponse de signe négative. Ainsi, une déclaration ci-dessus devrait fournir la sortie correctement (seulement passé).Pourquoi ce code de formule ne fonctionne pas les jours suivants (en différence de date)?

Et si j'ai sélectionné la date de calcul est un week-end comme samedi et dimanche, il est donné à la semaine précédente (si la différence de date est la semaine) + NOW() valeur du temps à la calculée le 9 AM et si le week-end est petit pour comparer à la différence de date (juste comme MAINTENANT() est un lundi et Date calculée est un hier du dimanche, samedi comme la différence des jours est 2, 3) dans une semaine c'est seulement montrant la valeur de la valeur NOW() à calculer au temps de 9 heures ici Mon code est followingly,

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))))) 

voici donc la j'obtenir la sortie seulement pour les jours passés non pour les jours à venir. Si elle est sélectionnée, la date doit être passée de la valeur de NOW() elle fournit la sortie correctement, comme si la valeur de Calculation date est 10/9/2016 alors elle fournit la valeur correctement comme 77 heures en sortie.

puis le Si je sélectionne le jour futur comme 23/10/2016 alors il fournit la sortie comme -20 heures mais la sortie correcte est -60 heures donc la formule fournit la sortie de manière incorrecte dans le futur seulement jours seulement donc c'est le problème que je veux l'aide pour rectifier ce problème et fournir la bonne sortie dans le passé ainsi que les jours futurs aussi. alors s'il vous plaît aidez-moi à résoudre ce problème et pour obtenir des réponses d'avance.

+0

on ne sait pas exactement ce que vous voulez réaliser avec votre formule. Pouvez-vous améliorer la description du problème? –

+0

@ L.Dutch Maintenant, je pense que je vais écrire clairement Ce que je veux et merci pour le suggérer de modifier une fois de plus. – MohanRaj

+0

Si vous pouviez ajouter le code derrière le Calculating_Date_c, cela pourrait vous aider à trouver l'origine de l'échec. En outre, je vois que dans un certain point de la formule vous avez (+ ou - - Normalement Excel attendrait un argument avant cela –

Répondre

0

à tous ici la réponse de ma question est followingly,

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))) 

ici je viens unifia les valeurs sont à venir dans la valeur de la différence de date sous la condition basée sur le passé et les jours à venir de manière initally.

Et également fournir la valeur de la si la valeur du samedi et dimanche sauvegarder la valeur précédente également à donner sur l'autre partie de la classe if comme démarré dans la formule ci-dessus là. (Note: si la formule est seulement pour être calculée à la valeur de la différence de date en heures sur la manière approximative pas en fonction du temps considéré comme un précis.). Merci Mohan (et merci tout particulièrement à Mr. Dutch.L pour avoir donné une idée des bugs de la recherche).