Как найти разницу в минутах между двумя unix-часами в swift? - PullRequest
1 голос
/ 09 марта 2019

Мне нужно найти разницу между двумя Unix epoch time.

let currentTime = Date().timeIntervalSince1970
let comingFromTheServer = TimeInterval(1552078800000)

Как найти разницу в минутах между двумя часами? Оба Epoch time в местных часовых поясах

Редактировать

let currentTime = Date().timeIntervalSince1970  // printing 25842307795.623497 which is somewhere in january
let startedTinme = TimeInterval(1552090800000 / 1000)

print((currentTime - startedTinme) / 60) 

let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.minute, .second]
formatter.unitsStyle = .abbreviated
let formatted = formatter.string(for: currentTime - startedTinme)
print(formatted)

Редактировать 2

Полагаю, произошло какое-то недопонимание Я хочу выяснить разницу между current time против specific времени. Я попробовал (обновил) версию кода:

Я использую это расширение, чтобы получить текущее время в миллисекундах (время эпохи)

extension Date {
var millisecondsSince1970:Int {
    return Int((self.timeIntervalSince1970 * 1000.0).rounded())
}

init(milliseconds:Int) {
    self = Date(timeIntervalSince1970: TimeInterval(milliseconds) / 1000)
}
}

Я получаю время с сервера, т.е. 1552086180000, что составляет 5:03 PM

Мое текущее время 5:12 PM. Так что разница должна быть 9 Minutes. Для этого я использую

let currentTime = Date().millisecondsSince1970
let startedTinme = TimeInterval(1552086180000) / 1000
How can I get the difference of `9` minutes here ?

1 Ответ

0 голосов
/ 09 марта 2019

Прежде всего, вам необходимо правильно преобразовать время, приходящее с сервера на TimeInterval. Время Unix обычно указывается в миллисекундах, а TimeInterval в секундах, поэтому:

let currentTime = Date().timeIntervalSince1970
let comingFromTheServer = TimeInterval(1552078800000) / 1000

Тогда просто рассчитайте разницу и конвертируйте в минуты:

print((currentTime - comingFromTheServer) / 60) // 160

или в формате:

let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.minute, .second]
formatter.unitsStyle = .abbreviated
let formatted = formatter.string(from: currentTime - comingFromTheServer) ?? ""
print(formatted) // 160m 41s

Учитывая вашу millisecondsSince1970 функцию, просто конвертируйте ее обратно в секунды:

let currentTime = TimeInterval(Date().millisecondsSince1970) / 1000
let startedTime = TimeInterval(1552086180000) / 1000
...