Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from datetime import date
- def end_of_word(word, n):
- w = {'год': ['год', 'года', 'лет'],
- 'месяц': ['месяц', 'месяца', 'месяцев'],
- 'день': ['день', 'дня', 'дней']}
- if n == 0:
- return
- elif str(n) in ['1', '21', '31']:
- return str(n) + ' ' + w[word][0]
- elif str(n) in ['11', '12', '13', '14']:
- return str(n) + ' ' + w[word][2]
- elif str(n)[-1] in ['2', '3', '4']:
- return str(n) + ' ' + w[word][1]
- else:
- return str(n) + ' ' + w[word][2]
- def compare_date(d1, d2):
- delta = (d2 - d1).days
- # если 1я дата больше второй - меняем их местами
- if delta < 0:
- delta = (d1 - d2).days
- d1, d2 = d2, d1
- # если даты совпадают - то выводим сообщение
- elif delta == 0:
- return 'Даты совпадают'
- extra_days = 0
- result = ''
- years = delta // 365
- if d2.year != d1.year:
- for year in range(1, years + 1):
- if (d2.year - year) % 4 == 0 or ((d2.year - year) % 100 == 0 and (d2.year - year) % 400 == 0):
- extra_days += 1 # високосный год
- rest_days = delta % 365 - extra_days
- months = 0
- days = 0
- month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
- if d2.year % 4 == 0 or (d2.year % 100 == 0 and d2.year % 400 == 0):
- month_days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
- for i in reversed(range(d2.month)):
- if rest_days - month_days[i - 1] >= 0:
- rest_days -= month_days[i - 1]
- months += 1
- if d2.month <= d1.month:
- for j in reversed(range(d1.month - 1, 12)):
- if rest_days - month_days[j - 1] >= 0:
- rest_days -= month_days[j - 1]
- months += 1
- days = rest_days
- for s in [('год', years), ('месяц', months), ('день', days)]:
- s = end_of_word(*s)
- if s is not None:
- result += s + ', '
- return result[:-2]
- d1 = date(2016, 2, 2)
- d2 = date.today()
- print(compare_date(d1, d2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement