Get the exact difference between 2 dates for a single NSDateComponent

前端 未结 4 1648
暗喜
暗喜 2021-01-20 10:49

How can I get the exact difference (in decimal) between 2 values of NSDate.

Eg. Jan 15 2016 to Jul 15 2017 = <

4条回答
  •  盖世英雄少女心
    2021-01-20 11:34

    Since you mentioned that your goal is something you can display to users as a meaningful indication of the time between two dates, you might find it easier to use NSDateComponentsFormatter. For example:

    let dateStr1 = "Jan 15 2016"
    let dateStr2 = "Jul 15 2017"
    
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "MMM dd yyyy"
    
    if let date1 = dateFormatter.dateFromString(dateStr1),
        let date2 = dateFormatter.dateFromString(dateStr2) {
        let dateComponentsFormatter = NSDateComponentsFormatter()
        dateComponentsFormatter.allowedUnits = [.Year, .Month]
        dateComponentsFormatter.unitsStyle = .Full
    
        let difference = dateComponentsFormatter.stringFromDate(date1, toDate: date2)
    }
    

    This gives you a string that reads "1 year, 6 months". It's not exactly what you specified as your goal, but it's a clear indication for users and avoids a lot of complexity. There's a property on NSDateComponentsFormatter called allowsFractionalUnits that's supposed to lead to results like "1.5 years", but it doesn't seem to work right now. (Even if you limit the allowedUnits to only .Year, you still don't get a fractional year. I'm off to file a bug with Apple...). You can tweak allowedUnits to get whatever granularity you like, and use includesApproximationPhrase to have the class add a localized version of "About..." to the resulting string if it's not precise. If you have some flexibility in your final format, this would be a really good solution.

提交回复
热议问题