Home > Enterprise >  Calculating the weeks between two dates in python from strings that have different formats
Calculating the weeks between two dates in python from strings that have different formats

Time:07-22

Data={
    0:{
        'date': "12 jul 2021",
        'country': "xyz",
        'country_id': "0",
        'event_dict': {
           0: {
               'event1': "T",
               'event_no': "45",
               'event_id': "01"
           },
           1: {
               'event1': "C",
               'event_no': "32",
               'event_id': "T",
           },    
           2: {
              'event1': "B",
              'event_no': "11",
              'event_id': "s",
           },    
           3: {
              'event1': "A",
              'event_no': "0",
              'event_id':"p",
           }
        },      
    },    
   1:{        
       'date1': "20th jun 2022",
       'country': "",
       'country_id': "1",    
       'event_dict': {
           0:{
              'event1': "no",
              'event_no': "23",
              'event_id':"abc"
           },
           1: {
              'event1': "yes",
              'event_no': "8",
              'event_id':"def",
           },    
           2: {
              'event1': "false",
              'event_no': "",
              'event_id': "ghi",
           },    
           3: {
              'event1': "NA",
              'event_no': "9",
              'event_id': "jkl", 
           }
        },
    },
}


res = Data[0]['date']
print(res)
# output is 12 jul 2021

res2 = Data[1]['date1']
print(res2)
# output is 20th jun 2022

I want to get the difference of weeks for this two dates that I have stored in two different variable. How to do this?

CodePudding user response:

First, you need to convert string to datetime with specific format of each date then compute different like below.

from datetime import datetime

d1 = datetime.strptime(Data[0]['date'], '%d %b %Y') # date is 12 jul 2021
d2 = datetime.strptime(Data[1]['date1'], '%dth %b %Y') # date is 20th jun 2022
diff = d2 - d1
print(f'days : {diff.days}')
print(f'weeks : {diff.days//7}')

days : 343
weeks : 49

Other formats for dates if you need to use and maybe your dates have different formats: (From here : Ref)

  • %d is the day number (2 digits, prefixed with leading zero's if necessary)
  • %m is the month number (2 digits, prefixed with leading zero's if necessary)
  • %b is the month abbreviation (3 letters)
  • %B is the month name in full (letters)
  • %y is the year number abbreviated (last 2 digits)
  • %Y is the year number full (4 digits)

CodePudding user response:

You'll need to convert the dates into a date object first. At the moment they're strings. You can do that by using something similar to this:

from datetime import datetime

date_time_str = '20th june 2022'

date_time_obj = datetime.strptime(date_time_str, '%dth %B %Y')


print ("The type of the date is now",  type(date_time_obj))
print ("The date is", date_time_obj)

Once you have done this, you can subtract the two dates to get the days between them. Then you will just need to convert the days difference into a week difference.

CodePudding user response:

res2 = res2.replace("th", "") # sanitize date string.

res = datetime.strptime(res, "%d %b %Y") # parse first date string to date
res2=datetime.strptime(res2, "%d %b %Y") # parse second date string to date

print (res2-res) # date substraction gives you days.

dayDiff = (res2-res).days # get the days
print (dayDiff/7) # and divide by 7 to get weeks
  • Related