web-dev-qa-db-fra.com

Comment avoir une différence de «x ans, y mois, z jours» entre deux dates?

J'ai deux dates: 29/05/2020 et aujourd'hui.

Comment puis-je obtenir une DAIRE DIFF de ces 2 dates, dans un format significatif tel que "z ans, x mois, y jours" séparant ces dates?

Idéalement, cela devrait également tenir compte du nombre de jours dans chaque mois (par exemple peut avoir 31 jours, mais juin n'a que 30 jours) et une exigence supplémentaire: je dois soustraire 21 jours à cette durée, car il y avait 21 jours entre ces 2 dates qui "ne comptent pas".

3
user256515

Je suggérerais que vous examiniez la fonction Networkday.Intl, ce qui vous permet de trouver la différence entre deux dates comptabilisation des jours de fin de semaine standard et personnalisés, et pour toute liste supplémentaire de vacances ou de jours de congé. Par exemple, en supposant que votre date passée était dans la cellule A1:

=NETWORKDAYS.INTL(A1,TODAY(),"0000001", DaysOff!A2:A)

La traduction simple-anglaise ici est "Trouvez les journées de travail qui s'est produite entre les deux dates, étant donné que chaque dimanche était un jour de congé et à l'exclusion des dates énumérées en jours! A2: a."

La chaîne "0000001" définit quels sont vos jours de week-end réguliers, à partir de lundi.

0 = "Non compté comme une journée hebdomadaire de congé" 1 = "compté comme une journée hebdomadaire"

Ensuite, vous venez de configurer une feuille (je suggère des jours! Ici) où vous énumérez des vacances supplémentaires et que vous ne devriez pas être comptée au total, le nombre de jours comptez entre les dates mais qui ne sont pas des occurrences hebdomadaires régulières.

1
Erik Tyler

Le processus commence par:

=DATEDIF(start_date, end_date, unit)

Référence

Compte tenu de mes paramètres régionaux (France), j'utilise des points-virgules non des virgules pour définir les champs afin:

enter image description here

que ce que vous voyez retourne une valeur de 142.

Donc, vous devez alors étendre le DATEDIF _ pour inclure l'expression ci-dessous à l'aide de DATEDIF 'S pour atteindre votre objectif (à l'aide de références cellulaires pour la consommabilité de prolongation).

=IF(DATEDIF(A1, B1, "D")>365, QUOTIENT(DATEDIF(A1, B1, "D"), 365)&" year(s) "&
                      QUOTIENT(MOD(DATEDIF(A1, B1, "D"), 365), 30)&" month(s) "&
                  MOD(QUOTIENT(MOD(DATEDIF(A1, B1, "D"), 365), 30), 30)&" day(s)",
 IF(DATEDIF(A1, B1, "D")>30,  QUOTIENT(DATEDIF(A1, B1, "D"), 30)&" month(s) "&
                               MOD(DATEDIF(A1, B1, "D"), 30)&" day(s)", 
                                   DATEDIF(A1, B1, "D")&" day(s)"))`

référence 2

1
User24601