NSDate разница времени

nsdate

#1

Запутался в сравнении времени. Есть к примеру время 14:30:00, а сейчас к примеру 14:18:00 и нужно показать сколько время осталось.


#2

Можно просто перевести в секунды все и найти разницу. А можно получить даты и вычислить разницу:

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  // разница в сутках
// и т.д.

Можете разложить дату на компоненты и тогда получите лишь ту разницу компонентов, которые Вас интересуют.


#3

А как правильно задать дату с которой я хочу сравнить?

let date1 = NSDateComponents()
date1.hour = 14
date1.minute = 30
date1.second = 00


let timeInterval = date1.timeIntervalSinceNow

#4
let dateComponents = NSDateComponents()
dateComponents.hour = 14
dateComponents.minute = 30
dateComponents.second = 00
let dateFromDC = calendar.date(from: dateComponents as DateComponents)

let timeInterval = dateFromDC?.timeIntervalSinceNow

Разницу получите в секундах, но немного корявый вариант, так как не понятно в какую сторону считать ему нужно.

По мне так Вам если нужно высчитать просто разницу, то вычитайте часы с часами, минуты с минутами, либо все преобразуйте в секунды, находите разницу, а затем ее переводите обратно в минуты, часы…


#5

Тогда если возможно напишите как Вы думаете, это я нашел в недрах интернета. Хотелось как бы по проще.


#6
// 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

#7

Извините, я наверное не правильно написал.

let time1 = Время допустим 14:30

let time2 = Время сейчас (в зависимости от того когда идет запрос, постоянно разное)


#8
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)! // получаете ответ в секундах

#9

Думаю это то что я хотел! а что такое calendar.date оно выдает ошибку, пробую перезаписать не получается


#10

Все должно работать.


#11

Что-то я упускаю…


#12

Да, выше добавьте строку:

let calendar = Calendar.current

я думал она у Вас уже есть.


#13

Огромное спасибо, все получилось! Еще хотел бы узнать. А как чтобы не задавать год месяц день, а просто 14:30 каждого дня, то есть открыл приложение если 14:30 еще не настало то выдает сколько времени до этого момента, а если прошло то просто условно отрицательный ответ. Я понимаю что метод сравнения, но как именно задать без учета года месяца и тд?


#14

Вы можете получить экземпляр Date и просто смотреть на компоненты .hour, .minute, соответственно сравнивать с соответствующим значением 14 и 30.


#15

Вроде понял. Спасибо большое!


#16

Вопрос: Как правильно вывести в timeFirst.text разницу времени. Выводит в секундах. Настроил чтобы обновлялось. Но как записать код чтоб он выдавал допустим 1м : 34 сек или 1 час 23 м 34 сек.
Правильно ли я начал Стрингом?


#17

Помогите, ответа так и не нашел:unamused:


#18

я сам начинающий :smile: а если сделать так:

Let hour = Int(timeInterval/60/60) // -это часы
Let minute = Int(Double(timeInterval/60/60)-hour) // -это минуты
timeFirst.text= "\ (hour):\ (minute)"

#19

Спасибо!) Let hour все получилось, а с минутами беда, нельзя отнимать Int :slight_smile:

Вот так заработало
let hour = Int(timeIntervalEvent/60/60)
let minute = Int(Double(timeIntervalEvent/60-Double(hour*60)))


#20

если только для секунд то вот пару полезних строчек

    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)")