Вы можете извлечь год текущего года и использовать его в сочетании с 12-м месяцем и 25-м днем для создания даты текущего года. Возможно, вам придется добавить один год, если мы находимся на последней неделе года.
extension Calendar {
static let gregorian = Calendar(identifier: .gregorian)
}
extension Date {
static var nextChristmas: Date {
DateComponents(calendar: .gregorian,
year: Date().year + (Date().month == 12 && Date().day > 25 ? 1 : 0),
month: 12,
day: 25).date!
}
static var timeLeftTillChristmas: DateComponents { Calendar.gregorian.dateComponents([.day, .hour, .minute, .second], from: Date(), to: Date.nextChristmas) }
var year: Int { Calendar.gregorian.component(.year, from: self) }
var month: Int { Calendar.gregorian.component(.month, from: self) }
var day: Int { Calendar.gregorian.component(.day, from: self) }
}
Date.nextChristmas.description(with: .current) // Wednesday, December 25, 2019 at 12:00:00 AM Brasilia Standard Time
Date.timeLeftTillChristmas // day: 70 hour: 7 minute: 19 second: 34