Skip to content

Instantly share code, notes, and snippets.

@amuradyan
Created March 31, 2019 22:09
Show Gist options
  • Save amuradyan/95cd48f3aa00e491313f22f02a1d05ee to your computer and use it in GitHub Desktop.
Save amuradyan/95cd48f3aa00e491313f22f02a1d05ee to your computer and use it in GitHub Desktop.
from datetime import datetime
from math import ceil
import calendar
def dates(d1: datetime, d2: datetime) -> list:
middle = []
for year in range(d1.year, d2.year):
middle.append(datetime(year, 12, 31))
return [d1] + middle + [d2]
def year_gap(d1: datetime, d2: datetime) -> float:
year_fraction = .0
dates_of_interest = sorted(dates(*sorted([d1, d2])))
i = 0
while i < len(dates_of_interest) - 1:
dl, dr = dates_of_interest[i], dates_of_interest[i + 1]
year_days = 365 + 1 * calendar.isleap(dr.year)
year_fraction += (dr - dl).days / year_days
i += 1
return ceil(year_fraction * 100) / 100
d1 = datetime(1991, 1, 3)
d2 = datetime(1992, 1, 25)
print(year_gap(d1, d2)) # 1.07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment