Comment calculer des semaines de travail entre deux dates (et pourquoi c’est plus compliqué qu’il n’y paraît)

Vous avez deux dates et vous devez savoir combien de semaines de travail se trouvent entre elles. On dirait un problème de cinq secondes : diviser le nombre de jours par 7, peut-être retirer quelques week-ends — terminé.

Sauf que non, parce que « semaine de travail » n’est pas un terme parfaitement précis. Selon ce que vous calculez — un préavis, un planning de projet, des droits à congés, une durée de contrat — la bonne méthode change, et la mauvaise peut vous décaler de plusieurs jours, avec des conséquences juridiques ou financières.

Qu’est-ce qu’une « semaine de travail » exactement ?

Le plus souvent, une semaine de travail signifie cinq jours : du lundi au vendredi. Mais il existe des cas particuliers importants :

  • Certains secteurs et pays utilisent une semaine de travail de 6 jours (lundi–samedi)
  • Certains postes ont des semaines compressées de 4 jours
  • Le Moyen-Orient a historiquement fonctionné sur dimanche–jeudi, même si la plupart des pays sont passés à lundi–vendredi
  • Les travailleurs à temps partiel peuvent avoir des semaines de travail de 2, 3 ou 4 jours

Dans le reste de cet article, « semaine de travail » signifie une semaine standard lundi–vendredi, sauf mention contraire. Les méthodes se généralisent une fois que vous connaissez les jours travaillés dans votre situation.

Méthode 1 : Semaines de travail complètes

L’interprétation la plus simple : combien de blocs complets lundi–vendredi tiennent entre deux dates ?

C’est ce que beaucoup de gens veulent dire quand ils demandent « ça fait combien de semaines de préavis ? ». Un préavis de 4 semaines signifie 4 blocs complets lundi–vendredi — 20 jours ouvrés — peu importe le jour de la semaine où tombe la date de départ.

Le calcul :

1. Compter le nombre total de jours calendaires entre les deux dates 2. Retirer les week-ends : chaque bloc complet de 7 jours contient 2 jours de week-end 3. Gérer les semaines partielles au début et à la fin

En pratique, il est plus simple de compter directement les jours ouvrés et de diviser par 5 :

working_weeks = working_days / 5

working_days est le nombre de jours du lundi au vendredi entre les deux dates.

Exemple : 7 avril (lundi) au 2 mai (vendredi)

  • Jours calendaires : 25
  • Week-ends dans l’intervalle : 4 samedis + 4 dimanches = 8 jours
  • Jours ouvrés : 25 − 8 = 17... non, ce n’est pas correct.

La bonne approche : compter les lundis à vendredis inclus :

  • Semaine 1 : 7–11 avr (5 jours)
  • Semaine 2 : 14–18 avr (5 jours)
  • Semaine 3 : 21–25 avr (5 jours)
  • Semaine 4 : 28 avr–2 mai (5 jours)

Total : 20 jours ouvrés = 4 semaines de travail exactement.

Comme l’exemple commence un lundi et se termine un vendredi, tout tombe « proprement ». Si vous commencez ou terminez en milieu de semaine, vous obtenez un résultat fractionnaire — ce qui nous amène à la méthode suivante.

Méthode 2 : Jours ouvrés divisés par 5

Pour la plupart des usages pratiques — planification de projet, estimation de planning, calcul de capacité — vous n’avez pas besoin de semaines entières. Vous avez besoin de jours ouvrés, puis vous exprimez le résultat en semaines et jours.

La formule :

total_working_days = (full_weeks × 5) + working_days_in_partial_week
weeks = floor(total_working_days / 5)
remaining_days = total_working_days mod 5

Exemple : 18 mars (mercredi) au 11 avril (vendredi)

Compter les jours ouvrés :

  • 18 mars (mer.) à 21 mars (ven.) : 4 jours
  • 24–28 mars : 5 jours
  • 31 mars–4 avr : 5 jours
  • 7–11 avr : 5 jours

Total : 19 jours ouvrés = 3 semaines et 4 jours.

Cette méthode est la bonne pour des plannings de projet où vous raisonnez en capacité (jours), pas en semaines calendaires.

Méthode 3 : Écart de semaines ISO

Parfois, « combien de semaines entre » signifie : quelle est la différence entre les numéros de semaines ISO ?

Exemple : Un événement se déroule de la semaine ISO 10 à la semaine ISO 23. Cela fait 13 semaines ISO de durée.

Le calcul :

week_span = (end_iso_year × 52.18) + end_iso_week − (start_iso_year × 52.18) + start_iso_week

En pratique, pour des dates dans la même année :

week_span = end_iso_week − start_iso_week

Pour des dates qui franchissent une frontière d’année, il faut tenir compte du fait que l’année de départ a 52 ou 53 semaines :

week_span = (52_or_53_for_start_year − start_iso_week) + end_iso_week

Cette méthode est pertinente pour la programmation de diffusion, la planification retail, et tout système qui organise le travail par numéro de semaine ISO plutôt que par jours ouvrés.

Le problème de l’inclusivité des dates

Une des sources d’erreurs les plus fréquentes : faut-il compter la date de début, la date de fin, les deux, ou aucune ?

Un « préavis de 4 semaines à partir d’aujourd’hui » peut vouloir dire :

  • 4 semaines à partir d’aujourd’hui, où aujourd’hui est le jour 1 (début inclusif) : la période se termine le même jour de la semaine, 4 semaines plus tard
  • 4 semaines après aujourd’hui (début exclusif) : la période se termine un jour plus tard que le cas précédent

Le droit du travail dans la plupart des pays le précise explicitement. Au Royaume-Uni, la période de préavis est comptée à partir du lendemain de la notification. Aux États-Unis, cela varie selon le contrat.

La différence est d’un jour. Dans la plupart des cas, ce n’est pas critique. Dans un litige ou une rupture de contrat, ça peut l’être.

Convention sûre : préciser « X semaines de travail à partir du [date], début inclusif/exclusif ». Ne laissez pas d’ambiguïté.

Jours fériés : le calcul que tout le monde oublie

Les calculs de semaines de travail qui ne tiennent pas compte des jours fériés sont faux par définition — ils surestiment le temps de travail disponible.

Le problème : les jours fériés ne sont pas standardisés. Ils varient selon :

  • Le pays (Noël est le 25 décembre au Royaume-Uni ; ce n’est pas un jour férié au Japon)
  • La région (les États américains n’ont pas tous les mêmes jours fériés ; l’Angleterre et l’Écosse ont des « bank holidays » différents)
  • L’année (les fêtes mobiles comme Pâques changent de date chaque année)
  • Le contrat de travail (certains emplois ont des jours supplémentaires ; certains services publics observent des dates différentes)

Pour des estimations grossières — « ça fait environ 6 semaines de travail » — ignorer les jours fériés peut suffire. Pour des calculs précis — échéances contractuelles, préavis, délais légaux — vous devez soustraire les jours fériés applicables.

Aucun calculateur ne peut le faire automatiquement sans connaître votre juridiction et l’année concernée. Le calculateur de jours entre deux dates vous donne un nombre de jours ouvrés hors week-ends ; vous soustrayez ensuite manuellement vos jours fériés locaux.

Une approximation utile pour le Royaume-Uni : environ 8 « bank holidays » par an, soit ~1,6 par mois. Pour un calcul sur 3 mois, cela fait environ 5 jours fériés à retirer. Pour les jours fériés fédéraux aux États-Unis : 11 par an, soit ~0,9 par mois.

Préavis : comment les maths fonctionnent vraiment

Les contrats de travail indiquent les préavis en semaines ou en mois. La conversion en jours ouvrés est l’endroit où les erreurs sont les plus fréquentes.

« 4 semaines de préavis » signifie 4 semaines calendaires (28 jours), pas 4 × 5 = 20 jours ouvrés. Si le préavis est donné un mardi, il court pendant 28 jours calendaires — week-ends inclus. Le dernier jour est le mardi 4 semaines plus tard.

Cela surprend, car beaucoup s’attendent à ce que « 4 semaines » signifie 20 jours ouvrés. Ce n’est pas le cas : c’est 28 jours calendaires, et les week-ends comptent dans la durée de préavis, même si vous ne travaillez pas ces jours-là.

« 1 mois de préavis » est encore moins précis. Un mois à partir du 15 janvier, c’est le 15 février. Un mois à partir du 31 janvier, c’est le 28 février (ou le 29 en année bissextile). Le nombre de jours calendaires varie de 28 à 31. Le nombre de jours ouvrés dans ce mois varie de 20 à 23.

Semaines de travail vs semaines calendaires dans les contrats :

Si un contrat dit « 4 semaines de travail de préavis », cela signifie 20 jours ouvrés — du lundi au vendredi uniquement. Les week-ends ne comptent pas. Dans ce cas, un préavis commençant un mardi durerait 20 jours ouvrés et se terminerait plusieurs semaines calendaires plus tard selon le nombre de week-ends qui tombent dans la période.

Vérifiez toujours si votre contrat dit « semaines » ou « semaines de travail ». La différence peut être de 8 à 10 jours sur un préavis typique.

Plannings de projet : semaines d’effort vs semaines calendaires

En gestion de projet, « 3 semaines de travail » et « 3 semaines calendaires » ne veulent pas dire la même chose.

3 semaines d’effort à pleine capacité = 15 jours-personnes ouvrés. Si une tâche demande 3 semaines d’effort pour une personne à temps plein, elle prend 3 semaines calendaires. Si deux personnes se la partagent, elle prend 1,5 semaine calendaire. Si une personne est à 50 % de capacité, elle prend 6 semaines calendaires.

3 semaines calendaires = 15 jours ouvrés en supposant : pas de jours fériés, personne à temps partiel, et pas de surcharge de changements de contexte.

La distinction compte pour fixer des dates de livraison. Si vous dites à une partie prenante qu’une fonctionnalité prendra « 3 semaines » et que vous pensez en semaines de travail à 80 % de capacité avec un jour férié au milieu, la date de fin calendaire est très différente de ce qu’elle imagine.

Quand vous annoncez des délais :

  • Indiquez des jours ouvrés (pas des semaines) pour les tâches de moins d’un mois
  • Donnez la date de fin calendaire comme contrôle de cohérence
  • Mentionnez explicitement les jours fériés dans la fenêtre

Calculer des semaines de travail dans du code

Python :

from datetime import date, timedelta

def working_days(start: date, end: date) -> int:
    total = 0
    current = start
    while current <= end:
        if current.weekday() < 5:  # 0=Mon, 4=Fri
            total += 1
        current += timedelta(days=1)
    return total

def working_weeks(start: date, end: date) -> float:
    return working_days(start, end) / 5

# Example
start = date(2026, 4, 7)
end = date(2026, 5, 2)
print(working_days(start, end))   # 20
print(working_weeks(start, end))  # 4.0

Pour de grandes plages de dates, une approche plus rapide utilise l’arithmétique modulaire pour éviter de boucler :

def working_days_fast(start: date, end: date) -> int:
    days = (end - start).days + 1
    full_weeks, remainder = divmod(days, 7)
    working = full_weeks * 5
    # Count working days in the partial week
    start_dow = start.weekday()  # 0=Mon
    for i in range(remainder):
        if (start_dow + i) % 7 < 5:
            working += 1
    return working

JavaScript :

function workingDays(start, end) {
  let count = 0
  const current = new Date(start)
  while (current <= end) {
    const day = current.getDay()
    if (day !== 0 && day !== 6) count++  // 0=Sun, 6=Sat
    current.setDate(current.getDate() + 1)
  }
  return count
}

function workingWeeks(start, end) {
  return workingDays(start, end) / 5
}

SQL (PostgreSQL) :

-- Working days between two dates (excluding weekends)
SELECT
  (EXTRACT(DOW FROM end_date) - EXTRACT(DOW FROM start_date))::int +
  ((end_date - start_date) / 7) * 5 +
  CASE WHEN EXTRACT(DOW FROM start_date) = 0 THEN 1 ELSE 0 END +
  CASE WHEN EXTRACT(DOW FROM end_date) = 6 THEN -1 ELSE 0 END
AS working_days
FROM (SELECT DATE '2026-04-07' AS start_date, DATE '2026-05-02' AS end_date) t;

Référence rapide

Ce que vous voulezMéthode
Durée de préavisJours calendaires (week-ends inclus)
Capacité de travail d’un projetJours ouvrés (lun–ven), diviser par 5 pour obtenir des semaines
Planification diffusion/retailÉcart de semaines ISO
Droits à congésJours ouvrés, soustraire les jours fériés
Échéances contractuellesJours calendaires sauf si le contrat dit « jours ouvrés »

Le calculateur de jours entre deux dates affiche à la fois les jours calendaires et les jours ouvrés pour n’importe quel intervalle — utile comme point de départ avant d’ajuster pour les jours fériés de votre juridiction.