расчет продолжительности между NSDate swift 2

В уведомлениях вы видите действия, которые показывают «опубликовано 5 минут назад». Это то, чего я пытаюсь добиться здесь. Перечисленные ниже функции работают правильно.

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

    let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: [])
//    print(components.second)
    return components.day
}

daysBetweenDate(postedDate, endDate: NSDate())

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

    let components = calendar.components([.Hour], fromDate: startDate, toDate: endDate, options: [])
    //    print(components.second)
    return components.hour
}

hoursBetweenDate(postedDate, endDate: NSDate())

Как узнать, является ли опубликованная дата уже секундой, минутой, часом или днем. И вернуть то, что необходимо?

если продолжительность между двумя NSDates превышает минуту, я хочу вывести «34 минуты назад», а когда она превышает час, «2 часа назад» и так далее. Как я могу сделать это условно.


person suisied    schedule 26.10.2015    source источник
comment
Вы пробовали искать перед публикацией? Вы можете не найти ответ для swift, но вы обязательно найдете его для objective-c.   -  person trojanfoe    schedule 26.10.2015
comment
Кажется, вы уже решили проблему. Я не понимаю, в чем сейчас вопрос.   -  person matt    schedule 26.10.2015
comment
@matt, если продолжительность между двумя NSDates превышает минуту, я хочу вывести 34 минуты назад, а когда более часа, 2 часа назад и так далее. Как я могу сделать это условно.   -  person suisied    schedule 26.10.2015
comment
Мы подумаем. Если есть дни, то выведите только дни. Если нет, то если есть часы, выведите только часы. Если нет, то, если есть минуты, выведите только минуты. В противном случае выведите только секунды.   -  person matt    schedule 26.10.2015
comment
Кстати, здесь вы можете получить большую помощь от NSDateComponentsFormatter.h.   -  person matt    schedule 26.10.2015


Ответы (1)


Дайте две даты, вы можете сделать это довольно хорошо с помощью NSDateComponentsFormatter:

let form = NSDateComponentsFormatter()
form.maximumUnitCount = 1
form.unitsStyle = .SpellOut // or .Full, whatever you prefer
let s = form.stringFromTimeInterval(
    d1.timeIntervalSinceReferenceDate - d2.timeIntervalSinceReferenceDate)
person matt    schedule 26.10.2015
comment
Вы понимаете, что вам нужно вычесть более раннюю дату из более поздней, не так ли? - person matt; 26.10.2015