Comment obtenir le nombre de jours entre deux dates en Python ?

Published: 20 mars 2015

Updated: 09 janvier 2024

DMCA.com Protection Status

Introduction

Lorsque l'on travaille avec des dates et des heures, il est courant d'avoir besoin de calculer la différence entre deux dates. Dans ce cas, vous voudrez peut-être obtenir le nombre de jours entre deux dates données.

En utilisant le module datetime

Une façon d'obtenir le nombre de jours entre deux dates en Python est d'utiliser le module datetime.

En utilisant le module datetime, vous avez la possibilité de créer différents objets tels qu'un objet date (basé sur l'année, le mois et le jour) ou un objet datetime (basé sur l'année, le mois, le jour, l'heure et la minute). Avec ces objets, vous pouvez facilement calculer la différence en jours. Il est impératif de faire preuve de prudence lors de la création de ces objets, car la sortie résultante peut être un entier ou un flottant, en fonction du contexte.

En utilisant date objects

Ce module fournit un objet date qui représente une date et permet d'effectuer divers calculs.

Pour commencer, vous devrez importer le module datetime :

import datetime

Ensuite, créez deux objets de date en utilisant le constructeur datetime.date(). À titre d'illustration, considérons deux instances de date : une représentant le 3 août 2019 et l'autre représentant le 9 août 2019 :

start_date = datetime.date(2019, 8, 3)

end_date = datetime.date(2019, 8, 9)

Maintenant que nous avons nos deux dates, nous pouvons utiliser l'objet timedelta pour calculer la différence entre elles. L'objet timedelta représente une durée et peut être utilisé pour effectuer des opérations arithmétiques sur les dates. Nous pouvons créer un timedelta représentant 6 jours (la différence entre le 9 août et le 3 août) et ensuite utiliser l'attribut days pour obtenir le nombre de jours :

delta = end_date - start_date

print(delta.days)

Cela produira une sortie.

6

, indiquant qu'il y a 6 jours entre les deux dates.

En utilisant datetime objects

Créons maintenant deux objets datetime et explorons comment calculer la durée entre eux en termes de jours. Veuillez noter que c'est légèrement différent de l'exemple précédent. Ce n'est pas seulement une date, mais un datetime qui inclut l'heure et les minutes. Pour cela, nous pouvons utiliser le module datetime de Python. Importons-le :

import datetime

Maintenant, créons nos deux dates en tant qu'objets datetime :

start_date = datetime.datetime(2019, 8, 3, 15, 30)

end_date = datetime.datetime(2019, 8, 9, 20, 42)

Ces deux dates représentent le 3 août 2019 à 15h30 et le 9 août 2019 à 20h42.
Pour trouver le nombre de jours entre ces deux dates, nous pouvons utiliser la syntaxe end_date - start_date. Cela nous donnera un objet datetime qui représente la durée entre start_date et end_date. Pour obtenir uniquement le nombre de jours, nous pouvons utiliser l'attribut .days sur cet objet datetime. Ainsi, dans notre cas, le code serait :

duration = (end_date - start_date).days

Which will give us a duration of 6 days.

Using datetime objects has the advantage of allowing you to obtain a fraction of a day from a timedelta. For example:

duration = (end_date - start_date).total_seconds() / 86400

Output

6.216666666666667

En utilisant le module numpy

Une autre façon d'obtenir le nombre de jours entre deux dates est d'utiliser le module numpy. Ce module fournit un puissant type de données datetime64 qui peut être utilisé pour représenter des dates avec une précision à la nanoseconde.

Soyez prudent lors de la définition de vos tableaux, tout comme dans l'exemple précédent. Faites attention à la façon dont vous les déclarez et les utilisez.

En utilisant datetime64[D]

from numpy import timedelta64

D1 = np.array(['2019-07-23', '2019-08-03', '2019-08-29'], dtype='datetime64[D]')

D2 = np.array(['2019-07-15', '2019-08-22', '2019-08-29'], dtype='datetime64[D]')

DELTA = D2 - D1

Cela produira une sortie.

array([-8, 19,  0], dtype='timedelta64[D]')

En utilisant datetime64

from numpy import timedelta64

D1 = np.array(['2019-07-23T13:30', '2019-08-03T13:30', '2019-08-29T03:30'], dtype='datetime64')

D2 = np.array(['2019-07-15T17:30', '2019-08-22T03:30', '2019-08-29T03:30'], dtype='datetime64')

DELTA = D2 - D1

Veuillez noter que dans ce cas, la différence entre les deux dates est mesurée en minutes.

array([-11280,  26760,      0], dtype='timedelta64[m]')

Si nous souhaitons l'exprimer en termes de jours, nous pouvons suivre l'approche suivante :

DELTA.astype('int') * 1.0 / (24 * 60)

Cela donnera en sortie

array([-7.83333333, 18.58333333,  0.        ])

Références