Подсчет в годах


#1

У кого есть решение?
Необходимо получить год. Например: пользователь вводит дату рождения, к ней надо прибавить сто лет и от полученного года вычесть разницу между днем рождения и текущим днем. Получить результат сколько времени осталось до этой даты в годах.


#2

Вы точно правильно сформулировали вопрос? Тут алгоритм такой:

дата рождения = 15 сентября 1990

дата для расчета = дата рождения + 100 лет

разница = сегодня - дата рождения

итоговая дата = дата для расчета - разница

Относительно чего считать оставшееся время? И точно ли в годах, а не днях или месяцах?


#3

Продолжите мой алгоритм похожим образом, а я вам в коде покажу. Просто хоть убей, не могу до конца вопрос понять и относительно чего считать


#4

Тут походу сильно думать не нужно)))
Вопрос на который хочет ответить автор: “Сколько тебе осталось лет до 100”


#5

Нужно получить ответ сколько тебе осталось лет до 100

дата рождения = 15 сентября 1990

дата для расчета = дата рождения + 100 лет / получается 15 сентября 2090

разница = сегодня - дата рождения / получается 28 лет

итоговая дата = дата для расчета - разница / получается 2090 - (1990 + 28) = 72
итоговая в годах = 72 года

“И точно ли в годах, а не днях или месяцах?”
Изначально так и планировал, но голова стала кружиться)). Поэтому решил пока разобраться с годами))


#6

Так и есть. Но мне не с руки гадать, проще написать согласно точной формулировке.

Ок. Сейчас сделаю пример и напишу.


#7
extension Date {
  
  func adding(minutes: Int) -> Date {
    return Calendar.current.date(byAdding: .minute, value: minutes, to: self)!
  }
  
  func adding(hours: Int) -> Date {
    return Calendar.current.date(byAdding: .hour, value: hours, to: self)!
  }
  
  func adding(days: Int) -> Date {
    return Calendar.current.date(byAdding: .day, value: days, to: self)!
  }
  
  func adding(weaks: Int) -> Date {
    return Calendar.current.date(byAdding: .day, value: weaks * 7, to: self)!
  }
  
  func adding(months: Int) -> Date {
    return Calendar.current.date(byAdding: .month, value: months, to: self)!
  }
  
  func adding(years: Int) -> Date {
    return Calendar.current.date(byAdding: .year, value: years, to: self)!
  }
  
}

let userBirthDayDate = Date().adding(months: -2).adding(days: -15).adding(years: -28) // 15 June 1990 - user's burthday

let after100YearsDate = userBirthDayDate.adding(years: 100) // 15 June 2090

let nowDate = Date() // 31 August 2018

let calendar = Calendar.current

let diffrence = calendar.dateComponents([.year], from: nowDate).year! - calendar.dateComponents([.year], from: userBirthDayDate).year! // 28 years

let result = calendar.dateComponents([.year], from: after100YearsDate).year! - (diffrence + calendar.dateComponents([.year], from: userBirthDayDate).year!)