详情
- Xcode 11.5(11E608c),Swift 5.1
想法
基于使用dateComponents(_:from:to:)函数
解决方案
import Foundation
extension Date {
func fullDistance(from date: Date, resultIn component: Calendar.Component, calendar: Calendar = .current) -> Int? {
calendar.dateComponents([component], from: self, to: date).value(for: component)
}
func distance(from date: Date, only component: Calendar.Component, calendar: Calendar = .current) -> Int {
let days1 = calendar.component(component, from: self)
let days2 = calendar.component(component, from: date)
return days1 - days2
}
func hasSame(_ component: Calendar.Component, as date: Date) -> Bool {
distance(from: date, only: component) == 0
}
}
完整示例
不要忘记在此处放置解决方案代码(请参见上面)
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy hh:mm:ss"
let smallerDate = dateFormatter.date(from: "01-01-2012 00:05:01")!
let biggerDate = dateFormatter.date(from: "03-12-2019 09:30:01")!
print(smallerDate.fullDistance(from: biggerDate, resultIn: .day))
print(biggerDate.fullDistance(from: smallerDate, resultIn: .day))
print(smallerDate.fullDistance(from: biggerDate, resultIn: .year))
print(biggerDate.fullDistance(from: smallerDate, resultIn: .year))
print(smallerDate.fullDistance(from: biggerDate, resultIn: .hour))
print(biggerDate.fullDistance(from: smallerDate, resultIn: .hour))
print(smallerDate.distance(from: biggerDate, only: .day))
print(biggerDate.distance(from: smallerDate, only: .day))
print(smallerDate.distance(from: biggerDate, only: .year))
print(biggerDate.distance(from: smallerDate, only: .year))
print(smallerDate.distance(from: biggerDate, only: .hour))
print(biggerDate.distance(from: smallerDate, only: .hour))
print(smallerDate.hasSame(.day, as: biggerDate))
print(biggerDate.hasSame(.second, as: smallerDate))