# 1360. Number of Days Between Two Dates ```python= # from datetime import date class Solution: def daysBetweenDates(self, date1: str, date2: str) -> int: # d1 = date(int(date1[0:4]), int(date1[5:7]), int(date1[8:10])) # d2 = date(int(date2[0:4]), int(date2[5:7]), int(date2[8:10])) # delta = d2 - d1 # return abs(delta.days) # if (year is not divisible by 4) then (it is a common year) # else if (year is not divisible by 100) then (it is a leap year) # else if (year is not divisible by 400) then (it is a common year) # else (it is a leap year) def monthday(y): if y%4!=0: # not by 4 return [0,31,28,31,30,31,30,31,31,30,31,30,31] # common # by 4 elif y%100!=0: return [0,31,29,31,30,31,30,31,31,30,31,30,31] # leap elif y%400!=0: return [0,31,28,31,30,31,30,31,31,30,31,30,31] # common else: return [0,31,29,31,30,31,30,31,31,30,31,30,31] # leap def betweeen_year(y_old,y_new): # include left and right endpoints return sum([sum(monthday(y)) for y in range(y_old,y_new+1)]) def betweeen_month(m_old, m_new,y): # include left and right endpoints return sum(monthday(y)[m_old:m_new+1]) def til_end_of_month(y,m,d): return monthday(y)[m] - d + 1 def til_end_of_year(y,m,d): return til_end_of_month(y,m,d) + betweeen_month(m+1, 12, y) def start_of_year_til_theday(y,m,d): return betweeen_month(1, m-1, y) + d y1 = int(date1[0:4]) m1 = int(date1[5:7]) d1 = int(date1[8:10]) y2 = int(date2[0:4]) m2 = int(date2[5:7]) d2 = int(date2[8:10]) # maitain date2 > date1 if y1 > y2: date1,date2=date2,date1 elif y1 == y2: if m1 > m2: date1,date2=date2,date1 elif m1 == m2: if d1 > d2: date1,date2=date2,date1 y1 = int(date1[0:4]) m1 = int(date1[5:7]) d1 = int(date1[8:10]) y2 = int(date2[0:4]) m2 = int(date2[5:7]) d2 = int(date2[8:10]) if y2 > y1: return til_end_of_year(y1,m1,d1) + betweeen_year(y1+1,y2-1) + start_of_year_til_theday(y2,m2,d2) - 1 else: if m2 > m1: # under y1==y2 return til_end_of_month(y1,m1,d1) + betweeen_month(m1+1, m2-1, y1) + d2 - 1 else: return d2 - d1 ```