2016-10-17 1 views
1

Я добавил отметку времени в базу данных Firebase, форматированную как: 1476700050.83933.Не так давно .. от timestamp

Так что я хотел рассчитать время с момента создания этой метки, но в качестве вывода я получаю что-то вроде этого: 1969-12-31 23:32:04 +0000.

Он видит как-то правильно, но как я могу преобразовать его сейчас, как 5 минут назад, и т.д.

Я делаю мои вычисления, как это:

let timestamp = postsArray[indexPath.row].timestamp//query timestamp from Firebase 
let date = NSDate(timeIntervalSince1970: timestamp!)//Readable date 
let timeSincePost = (NSDate().timeIntervalSinceNow-NSDate().timeIntervalSince(date as Date))//Calculate time since 
print("TimeSince", NSDate(timeIntervalSince1970: timeSincePost)) 

я пошел корыто много подобных вопросов на многих языках, но все они разные. Я делаю это очень неправильно?

+0

Посмотрите на мой вопрос здесь: - http://stackoverflow.com/q/39171135/6297658 – Dravidian

ответ

1

NSDate().timeIntervalSinceNow возвращаемое значение близко к 0.

NSDate() - создает дату с текущей меткой времени, вы можете называть ее now. timeIntervalSinceNow здесь будет разница между временем создания данных и вызовом метода, минимальным значением.

Так что:

NSDate().timeIntervalSinceNow-NSDate().timeIntervalSince(date as Date) 

Можно увидеть, как это:

0 - now.timeIntervalSince(date as Date) 

Для всех дат в прошлом now.timeIntervalSince(date as Date) является положительным, и 0 - positive = negative

И в конце концов, вы вычитанием временной интервал с 1 января 1970 года и получить дату 1969 года. Кстати, почему вы это делаете?

Кроме того, прекратите использование NSDate в Swift 3, просто используйте Date.

И используйте this method для timeSincePost расчет.

как я могу преобразовать его сейчас, как 5 минут назад и т.д. ...

Просто используйте DateFormatter с doesRelativeDateFormatting значения ИСТИНЫ и получить stringFromDate с первоначальной датой вы получили с Firebird метки времени.

+0

Я делаю это потому, что я хочу получить время с поста на фиде :) –

+0

@ TarvoMäesepp, но я не могу соединить 'время с поста на фиде' и' timeIntervalSince1970'. У вас уже есть количество секунд после даты публикации, почему вам нужно связать его с 01.01.1970? – user28434

+0

Что вы имеете в виду в ответ «сейчас».?? И ответить на ваш вопрос .. Как это, я должен получить время с тех пор, как отправил timestamp или я ошибаюсь? Каково ваше предложение? –

1

Прежде всего, с:

let timeSincePost = (NSDate().timeIntervalSinceNow-NSDate().timeIntervalSince(date as Date))//Calculate time since 

Вы вычитать указанную дату из текущего времени, которое, например, результаты через 5 секунд. Затем с:

print("TimeSince", Date(timeIntervalSince1970: timeSincePost)) 

Вы находитесь в 5 секундах от начала координат. Какая проблема вы испытываете.


NSDate имеет метод timeIntervalSince(_:), чтобы получить разницу между двумя датами.Экономит ручное вычисление:

let interval = Date().timeIntervalSince(date) 

Это дает разницу в секундах. Чтобы определить количество дней и минут и т. Д., Используйте NSDateComponents. См. this для получения полезного руководства по его использованию.

0

У меня есть аналогичные требования, поэтому добавили расширение даты для этого:

public extension NSDate { 
    public func elapsedTimeString(toDate: NSDate? = NSDate()) -> String { 

    let distanceBetweenDates = toDate!.timeIntervalSinceDate(self) 
    let minutes = distanceBetweenDates/60 

    switch minutes { 
    case 0..<1: 
     return "now" 
    case 1..<60: 
     return "Int64(minutes) mins ago" 
    case 60..<(60 * 24): 
     return "Int64(minutes/60) hour(s) ago" 
    case (60 * 24)..<(60 * 24 * 7): 
     return "Int64(minutes/(60 * 24)) week(s) ago" 
    default: 
     // somehow the date is ahead? so consider it now 
     if minutes < 0 { 
      return "now" 
     } 
     return "Int64(minutes/(60 * 24 * 7)) week(s) ago" 
    } 
    } 
}