J'ai deux dates différentes et je veux connaître la différence de jours entre elles. Le format de la date est AAAA-MM-JJ.

J'ai une fonction qui peut AJOUTER ou soustraire un nombre donné à une date:

def addonDays(a, x):
   ret = time.strftime("%Y-%m-%d",time.localtime(time.mktime(time.strptime(a,"%Y-%m-%d"))+x*3600*24+3600))      
   return ret

Où A est la date et x le nombre de jours que je veux ajouter. Et le résultat est une autre date.

J'ai besoin d'une fonction où je peux donner deux dates et le résultat serait un int avec une différence de date en jours.

157
mauguerra 7 déc. 2011 à 21:17

5 réponses

Meilleure réponse

Utilisez - pour obtenir la différence entre deux datetime objets et prenez le membre days.

from datetime import datetime

def days_between(d1, d2):
    d1 = datetime.strptime(d1, "%Y-%m-%d")
    d2 = datetime.strptime(d2, "%Y-%m-%d")
    return abs((d2 - d1).days)
240
Fred Foo 7 déc. 2011 à 17:22

Une autre solution courte:

from datetime import date

def diff_dates(date1, date2):
    return abs(date2-date1).days

def main():
    d1 = date(2013,1,1)
    d2 = date(2013,9,13)
    result1 = diff_dates(d2, d1)
    print '{} days between {} and {}'.format(result1, d1, d2)
    print ("Happy programmer's day!")

main()
25
0x8BADF00D 30 juin 2014 à 16:23

Essaye ça:

data=pd.read_csv('C:\Users\Desktop\Data Exploration.csv')
data.head(5)
first=data['1st Gift']
last=data['Last Gift']
maxi=data['Largest Gift']
l_1=np.mean(first)-3*np.std(first)
u_1=np.mean(first)+3*np.std(first)


m=np.abs(data['1st Gift']-np.mean(data['1st Gift']))>3*np.std(data['1st Gift'])
pd.value_counts(m)
l=first[m]
data.loc[:,'1st Gift'][m==True]=np.mean(data['1st Gift'])+3*np.std(data['1st Gift'])
data['1st Gift'].head()




m=np.abs(data['Last Gift']-np.mean(data['Last Gift']))>3*np.std(data['Last Gift'])
pd.value_counts(m)
l=last[m]
data.loc[:,'Last Gift'][m==True]=np.mean(data['Last Gift'])+3*np.std(data['Last Gift'])
data['Last Gift'].head()
0
Ryan 24 juil. 2017 à 18:27

J'ai essayé le code posté par larsmans ci-dessus mais, il y a quelques problèmes:

1) Le code tel qu'il générera l'erreur comme mentionné par mauguerra 2) Si vous modifiez le code comme suit:

...
    d1 = d1.strftime("%Y-%m-%d")
    d2 = d2.strftime("%Y-%m-%d")
    return abs((d2 - d1).days)

Cela convertira vos objets datetime en chaînes mais, deux choses

1) Essayer de faire d2 - d1 échouera car vous ne pouvez pas utiliser l'opérateur moins sur les chaînes et 2) Si vous lisez la première ligne de la réponse ci-dessus, il est indiqué, vous souhaitez utiliser l'opérateur - sur deux objets datetime mais, vous venez de les a convertis en chaînes

Ce que j'ai trouvé, c'est que vous n'avez littéralement besoin que des éléments suivants:

import datetime

end_date = datetime.datetime.utcnow()
start_date = end_date - datetime.timedelta(days=8)
difference_in_days = abs((end_date - start_date).days)

print difference_in_days
2
schalkneethling 8 oct. 2012 à 15:23

Pd.date_range ('2019-01-01', '2019-02-01'). forme [0]

-2
ar91 5 juin 2019 à 20:54