Swift получить оставшиеся секунды времени на дату целевой строки - PullRequest
0 голосов
/ 09 мая 2020

Текущее время даты сегодня было 9 мая 2020 г., 22:03, и у меня есть целевая строковая дата со значением 2020-05-09 22:07:30 в формате yyyy-MM-dd HH:mm:ss.

Как я могу получить оставшаяся дата от этой 2 даты и распечатайте значение со строкой 04:30, поскольку диапазон этих 2 дат составляет 4 minutes and 30 seconds

Я могу только преобразовать миллисекунды в формат времени, например

func msToTime(ms: Int) {
    let seconds = ms % 60
    let minutes = ms / 60000

    return String(format: "%0.2d:%0.2d",minutes,seconds)
}

Вывод 04:30

Но я не знаю, как получить диапазон миллисекунд от сегодняшней даты до даты и времени цели. Или есть другой способ попроще?

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Вы можете использовать Calendar и DateComponents, чтобы легко вычислить разницу между датами в любых единицах измерения. Например, разница в минутах и ​​секундах:

let dateformatter = DateFormatter()
dateformatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let date = dateformatter.date(from: "2020-05-09 22:07:30")!
let now = Date()

let components = Calendar.current.dateComponents([.minute, .second], from: now, to: date)
print("difference: \(components.minute!):\(components.second!)")

2 голосов
/ 09 мая 2020

Простой способ, без каких-либо вычислений:

let d1 = Date()
let s = "2020-05-09 22:07:30"
let f = DateFormatter()
f.dateFormat = "yyyy-MM-dd HH:mm:ss"
f.timeZone = TimeZone.current // or whatever
if let d2 = f.date(from: s) {
    let f = DateComponentsFormatter()
    f.unitsStyle = .positional
    let result = f.string(from: d1, to: d2)
}

Если вам не нравится результирующий строковый формат result, вы можете удалить его части. - Однако учтите, что это работает только потому, что не задействованы полные дни. Неясно, каким может быть диапазон возможных входных данных или каким был бы желаемый результат, если бы вторая дата была, например, на три месяца вперед.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...