В Swift 5 и iOS 12 вы можете использовать одно из трех приведенных ниже решений, чтобы вычислить разницу (в годах, месяцах, днях) между двумя датами.
№1. Использование метода dateComponents(_:from:to:)
Calendar
Calendar
имеет метод с именем dateComponents(_:from:to:)
. dateComponents(_:from:to:)
имеет следующее объявление:
func dateComponents(_ components: Set<Calendar.Component>, from start: DateComponents, to end: DateComponents) -> DateComponents
Возвращает разницу между двумя датами, указанными как DateComponents
.
Пример Playground ниже показывает, как использовать dateComponents(_:from:to:)
для вычисления разницы между двумя датами:
import Foundation
let calendar = Calendar.current
let startComponents = DateComponents(year: 2010, month: 11, day: 22)
let endComponents = DateComponents(year: 2015, month: 5, day: 1)
let dateComponents = calendar.dateComponents([.year, .month, .day], from: startComponents, to: endComponents)
print(dateComponents) // prints: year: 4 month: 5 day: 9 isLeapMonth: false
№ 2. Использование метода dateComponents(_:from:to:)
Calendar
Calendar
имеет метод с именем dateComponents(_:from:to:)
. dateComponents(_:from:to:)
имеет следующее объявление:
func dateComponents(_ components: Set<Calendar.Component>, from start: Date, to end: Date) -> DateComponents
Возвращает разницу между двумя датами.
Пример Playground ниже показывает, как использовать dateComponents(_:from:to:)
для вычисления разницы между двумя датами:
import Foundation
let calendar = Calendar.current
let startDate = calendar.date(from: DateComponents(year: 2010, month: 11, day: 22))!
let endDate = calendar.date(from: DateComponents(year: 2015, month: 5, day: 1))!
let dateComponents = calendar.dateComponents([.year, .month, .day], from: startDate, to: endDate)
print(dateComponents) // prints: year: 4 month: 5 day: 9 isLeapMonth: false
№3. Использование метода string(from:to:)
DateComponentsFormatter
DateComponentsFormatter
имеет метод с именем string(from:to:)
. string(from:to:)
имеет следующее объявление:
func string(from startDate: Date, to endDate: Date) -> String?
Возвращает отформатированную строку на основе разницы во времени между двумя датами.
Пример Playground ниже показывает, как использовать string(from:to:)
для вычисления разницы между двумя датами:
import Foundation
let calendar = Calendar.current
let startDate = calendar.date(from: DateComponents(year: 2010, month: 11, day: 22))!
let endDate = calendar.date(from: DateComponents(year: 2015, month: 5, day: 1))!
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [.year, .month, .day]
let string = formatter.string(from: startDate, to: endDate)!
print(string) // prints: 4 years, 5 months, 9 days
08.10.2018