Как я могу определить разницу в днях в следующем примере

Я вычисляю разницу в днях между двумя датами, но я выяснил, что следующий код фактически дает мне разницу на 24 часа, а не разницу в дате. У меня есть следующий код:

func daysBetweenDate(startDate: NSDate, endDate: NSDate) -> Int
{
    let calendar = NSCalendar.currentCalendar()

    let components = calendar.components([.Day], fromDate:startDate, toDate: endDate, options: [])

    return components.day
}

Итак, для следующего примера я получаю этот результат:

lastLaunch: 2016-06-10 01:39:07 +0000

toady: 2016-06-11 00:41:41 +0000

dayDiff: 0

Я бы ожидал, что разница в день будет одна, так как последний запуск был 10-го, а сегодня 11-го. Как я могу изменить код, чтобы получить реальную разницу в днях?

 El Tomato11 июн. 2016 г., 03:20
Было бы 1, если бы сегодняшнее время было 2016-06-11 01:39:07 +0000 или позже?
 Ike1011 июн. 2016 г., 04:06
Посмотрите здесь, поскольку ваш вопрос кажется очень похожим:stackoverflow.com/questions/4739483/...

Ответы на вопрос(1)

Решение Вопроса

Вы можете использовать метод Date календаря BySettingHour, чтобы получить время полудня для ваших startDate и endDate, чтобы сделать ваши календарные вычисления не чувствительными ко времени:

Xcode 8.2.1 • Swift 3.0.2

extension Date {
    var noon: Date? {
        return Calendar.autoupdatingCurrent.date(bySettingHour: 12, minute: 0, second: 0, of: self)
    }
    func daysBetween(_ date: Date) -> Int? {
        guard let noon = noon, let date = date.noon else { return nil }
         return Calendar.autoupdatingCurrent.dateComponents([.day], from: noon, to: date).day
    }
}

let startDateString = "2016-06-10 01:39:07 +0000"
let todayString = "2016-06-11 00:41:41 +0000"
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.locale = Locale(identifier: "ex_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss xxxx"
if let startDate = formatter.date(from: startDateString),
    let endDate = formatter.date(from: todayString),
    let days = startDate.daysBetween(endDate) {
    print(startDate)  // "2016-06-10 01:39:07 +0000\n"
    print(endDate)    // "2016-06-11 00:41:41 +0000\n"
    print(days ?? "nil") // 1
}

Swift 2.x

extension NSDate {
    var noon: NSDate {
        return NSCalendar.currentCalendar().dateBySettingHour(12, minute: 0, second: 0, ofDate: self, options: [])!
    }
}
func daysBetweenDate(startDate: NSDate, endDate: NSDate) -> Int {
    return NSCalendar.currentCalendar().components([.Day],
                                fromDate: startDate.noon,
                                toDate: endDate.noon,
                                options: []).day
}

Ваш ответ на вопрос