Запутался в сравнении времени. Есть к примеру время 14:30:00, а сейчас к примеру 14:18:00 и нужно показать сколько время осталось.
NSDate разница времени
Можно просто перевести в секунды все и найти разницу. А можно получить даты и вычислить разницу:
let timeInterval = date2.timeIntervalSince(date1) // разница в секундах
let timeInterval = date2.timeIntervalSince(date1) / 60 // разница в минутах
let timeInterval = date2.timeIntervalSince(date1) / 60 / 60 // разница в часах
let timeInterval = date2.timeIntervalSince(date1) / 60 / 60 / 24 // разница в сутках
// и т.д.
Можете разложить дату на компоненты и тогда получите лишь ту разницу компонентов, которые Вас интересуют.
А как правильно задать дату с которой я хочу сравнить?
let date1 = NSDateComponents()
date1.hour = 14
date1.minute = 30
date1.second = 00
let timeInterval = date1.timeIntervalSinceNow
let dateComponents = NSDateComponents()
dateComponents.hour = 14
dateComponents.minute = 30
dateComponents.second = 00
let dateFromDC = calendar.date(from: dateComponents as DateComponents)
let timeInterval = dateFromDC?.timeIntervalSinceNow
Разницу получите в секундах, но немного корявый вариант, так как не понятно в какую сторону считать ему нужно.
По мне так Вам если нужно высчитать просто разницу, то вычитайте часы с часами, минуты с минутами, либо все преобразуйте в секунды, находите разницу, а затем ее переводите обратно в минуты, часы…
Тогда если возможно напишите как Вы думаете, это я нашел в недрах интернета. Хотелось как бы по проще.
// 14:30:00
let time1 = 14 * 60 * 60 + 30 * 60
// 14:00:00
let time2 = 14 * 60 * 60
// difference in seconds
let difference = time1 - time2
Извините, я наверное не правильно написал.
let time1 = Время допустим 14:30
let time2 = Время сейчас (в зависимости от того когда идет запрос, постоянно разное)
let calendar = Calendar.current
var dateComponents = DateComponents()
dateComponents.hour = 14
dateComponents.minute = 30
dateComponents.second = 00
dateComponents.year = 2016
dateComponents.month = 11
dateComponents.day = 18
let dateFromDC = calendar.date(from: dateComponents)
// используем минус, только лишь ради того, чтобы ответ был положительным, а так интервал будет отрицательным, так как время уже прошло
let timeInterval = -(dateFromDC?.timeIntervalSinceNow)! // получаете ответ в секундах
Думаю это то что я хотел! а что такое calendar.date оно выдает ошибку, пробую перезаписать не получается
Да, выше добавьте строку:
let calendar = Calendar.current
я думал она у Вас уже есть.
Огромное спасибо, все получилось! Еще хотел бы узнать. А как чтобы не задавать год месяц день, а просто 14:30 каждого дня, то есть открыл приложение если 14:30 еще не настало то выдает сколько времени до этого момента, а если прошло то просто условно отрицательный ответ. Я понимаю что метод сравнения, но как именно задать без учета года месяца и тд?
Вы можете получить экземпляр Date и просто смотреть на компоненты .hour, .minute, соответственно сравнивать с соответствующим значением 14 и 30.
Вопрос: Как правильно вывести в timeFirst.text разницу времени. Выводит в секундах. Настроил чтобы обновлялось. Но как записать код чтоб он выдавал допустим 1м : 34 сек или 1 час 23 м 34 сек.
Правильно ли я начал Стрингом?
я сам начинающий а если сделать так:
Let hour = Int(timeInterval/60/60) // -это часы
Let minute = Int(Double(timeInterval/60/60)-hour) // -это минуты
timeFirst.text= "\ (hour):\ (minute)"
Спасибо!) Let hour все получилось, а с минутами беда, нельзя отнимать Int
Вот так заработало
let hour = Int(timeIntervalEvent/60/60)
let minute = Int(Double(timeIntervalEvent/60-Double(hour*60)))
если только для секунд то вот пару полезних строчек
let po : Int = 12421 // все время в с
let s = po % 60
let min = (po - s) % 3600 / 60
let hour = (po - ( po % 3600) ) / 3600
print("s = \(s) min = \(min) hour = \(hour)")