Подтвердить что ты не робот

Удобные описания даты с NSDate на iOS

Я хочу показать NSDates в "удобном для человека образом", например, "на прошлой неделе" или "несколько дней назад". Что-то похожее на Pretty Time для Java.

Какой лучший способ сделать это, подклассификация NSDateFormatter? Прежде чем я пойду и заново изобретаю колесо, есть ли для этого какая-то библиотека?

4b9b3361

Ответ 1

Это решение в Swift 2:

func formattedHumanReadable(date: NSDate) -> String {
    let formatter = NSDateFormatter()
    formatter.timeStyle = .NoStyle
    formatter.dateStyle = .ShortStyle
    formatter.doesRelativeDateFormatting = true

    let locale = NSLocale.currentLocale()
    formatter.locale = locale

    return formatter.stringFromDate(date)
  }

Ответ 2

На iOS 4 и более поздних версиях используйте свойство doesRelativeDateFormatting:

NSDateFormatter *dateFormatter = ...;
dateFormatter.doesRelativeDateFormatting = YES;

Ответ 4

Полный фрагмент кода для человекочитаемых дат в Xcode:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];

    NSLocale *locale = [NSLocale currentLocale];
    [dateFormatter setLocale:locale];

    [dateFormatter setDoesRelativeDateFormatting:YES];

Ответ 5

Хороший формат даты YLMoment, который основан на популярном moment.js.

Отформатирует хорошие относительные времена.

Ответ 6

Используйте DateTools (github/Cocoapods) timeAgoSinceNow. Вот пример вывода...

NSDate.init(timeIntervalSinceNow:-3600).timeAgoSinceNow() "An hour ago" NSDate.init(timeIntervalSinceNow:-3600*24).timeAgoSinceNow() "Yesterday" NSDate.init(timeIntervalSinceNow:-3600*24*6).timeAgoSinceNow() "6 days ago" NSDate.init(timeIntervalSinceNow:-3600*24*7*3).timeAgoSinceNow() "3 weeks ago" NSDate.init(timeIntervalSinceNow:-3600*24*31*3).timeAgoSinceNow() "3 months ago"

Функция timeAgoSinceDate также удобна.

DateTools поддерживает многие (человеческие) языки и дает гораздо лучшие относительные описания, чем NSDateFormatter несколько ограниченный doesRelativeDateFormatting.