Swift 3 - find number of calendar days between two dates

前端 未结 11 2077
别跟我提以往
别跟我提以往 2020-12-12 23:51

The way I did this in Swift 2.3 was:

let currentDate         = NSDate()
let currentCalendar     = NSCalendar.currentCalendar()

var startDate : NSDate?
var e         


        
11条回答
  •  孤城傲影
    2020-12-13 00:11

    Turns out this is much simpler to do in Swift 3:

    extension Date {    
    
        func interval(ofComponent comp: Calendar.Component, fromDate date: Date) -> Int {
    
            let currentCalendar = Calendar.current
    
            guard let start = currentCalendar.ordinality(of: comp, in: .era, for: date) else { return 0 }
            guard let end = currentCalendar.ordinality(of: comp, in: .era, for: self) else { return 0 }
    
            return end - start
        }
    }
    

    Edit

    Comparing the ordinality of the two dates should be within the same era instead of the same year, since naturally the two dates may fall in different years.

    Usage

    let yesterday = Date(timeInterval: -86400, since: Date())
    let tomorrow = Date(timeInterval: 86400, since: Date())
    
    
    let diff = tomorrow.interval(ofComponent: .day, fromDate: yesterday)
    // return 2
    

提交回复
热议问题