Advertisement
Guest User

Untitled

a guest
Nov 25th, 2019
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.17 KB | None | 0 0
  1. from datetime import date
  2.  
  3. def end_of_word(word, n):
  4.     w = {'год': ['год', 'года', 'лет'],
  5.          'месяц': ['месяц', 'месяца', 'месяцев'],
  6.          'день': ['день', 'дня', 'дней']}
  7.  
  8.     if n == 0:
  9.         return
  10.     elif str(n) in ['1', '21', '31']:
  11.         return str(n) + ' ' + w[word][0]
  12.     elif str(n) in ['11', '12', '13', '14']:
  13.         return str(n) + ' ' + w[word][2]
  14.     elif str(n)[-1] in ['2', '3', '4']:
  15.         return str(n) + ' ' + w[word][1]
  16.     else:
  17.         return str(n) + ' ' + w[word][2]
  18.  
  19. def compare_date(d1, d2):
  20.     delta = (d2 - d1).days
  21.     # если 1я дата больше второй - меняем их местами    
  22.     if delta < 0:
  23.         delta = (d1 - d2).days
  24.         d1, d2 = d2, d1
  25.     # если даты совпадают - то выводим сообщение
  26.     elif delta == 0:
  27.         return 'Даты совпадают'
  28.  
  29.     extra_days = 0
  30.     result = ''
  31.     years = delta // 365
  32.  
  33.     if d2.year != d1.year:
  34.         for year in range(1, years + 1):
  35.             if (d2.year - year) % 4 == 0 or ((d2.year - year) % 100 == 0 and (d2.year - year) % 400 == 0):
  36.                 extra_days += 1  # високосный год
  37.  
  38.     rest_days = delta % 365 - extra_days
  39.     months = 0
  40.     days = 0
  41.  
  42.     month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  43.     if d2.year % 4 == 0 or (d2.year % 100 == 0 and d2.year % 400 == 0):
  44.         month_days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  45.  
  46.     for i in reversed(range(d2.month)):
  47.         if rest_days - month_days[i - 1] >= 0:
  48.             rest_days -= month_days[i - 1]
  49.             months += 1
  50.  
  51.     if d2.month <= d1.month:
  52.         for j in reversed(range(d1.month - 1, 12)):
  53.             if rest_days - month_days[j - 1] >= 0:
  54.                 rest_days -= month_days[j - 1]
  55.                 months += 1
  56.  
  57.     days = rest_days
  58.  
  59.     for s in [('год', years), ('месяц', months), ('день', days)]:
  60.         s = end_of_word(*s)
  61.         if s is not None:
  62.             result += s + ', '
  63.  
  64.     return result[:-2]
  65.  
  66.  
  67. d1 = date(2016, 2, 2)
  68. d2 = date.today()
  69. print(compare_date(d1, d2))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement