Я не верю, что это даст вам абсолютное количество часов. Это даст вам только значение от 0 до 24, где вы должны полагаться на компоненты День, Месяц и Год, чтобы получить полный интервал времени.
codeperson
Я тестировал это, и он отлично работает. С fromDate 1 / Jan / 2012 и toDate 4 / Jan / 2012 это вернуло 96 часов.
Thomas Müller
разместить свой код Томас? У некоторых это не работает.
Джон Риселвато
Ответы:
171
NSDate функция timeIntervalSinceDate: даст вам разницу двух дат в секундах.
Измените необходимые компоненты на день, час или минуту, какая разница вам нужна. Если NSDayCalendarUnitвыбран этот параметр, он будет возвращать количество дней между двумя датами аналогично для NSHourCalendarUnitиNSMinuteCalendarUnit
Версия Swift 4
let cal =Calendar.current
let d1 =Date()let d2 =Date.init(timeIntervalSince1970:1524787200)// April 27, 2018 12:00:00 AMlet components = cal.dateComponents([.hour],from: d2, to: d1)let diff = components.hour!
Нет, не делай этого. Не все часы имеют 3600 секунд. Не во всех днях есть 24 часа.
rmaddy
5
Это совершенно неверно. Без учета дополнительных секунд и перехода на летнее время. Пожалуйста, не изобретайте велосипед, просто используйте API, предоставляемые с iOS, такие как NSDateComponents.
Хуан Каталон,
5
Оформление заказа: учитывает переход на летнее время и високосный год, поскольку для расчета используется календарь iOS. Вы можете изменить строку и условия, включив минуты с часами и днями.
NSCalendar
«s-components:fromDate:toDate:options:
метода.Ответы:
NSDate функция timeIntervalSinceDate: даст вам разницу двух дат в секундах.
См. Справочную библиотеку Apple http://developer.apple.com/library/mac/navigation/, или, если вы используете Xcode, просто выберите справку / документацию в меню.
Смотрите: как-преобразовать-время-интервал-секунды в минуты
--редактировать: см. . ответ ÐąrέÐέvil ниже для правильной обработки летнего времени / дополнительных секунд
источник
Измените необходимые компоненты на день, час или минуту, какая разница вам нужна. Если
NSDayCalendarUnit
выбран этот параметр, он будет возвращать количество дней между двумя датами аналогично дляNSHourCalendarUnit
иNSMinuteCalendarUnit
Версия Swift 4
источник
источник
Оформление заказа: учитывает переход на летнее время и високосный год, поскольку для расчета используется календарь iOS. Вы можете изменить строку и условия, включив минуты с часами и днями.
источник
Для тех, кто использует swift 3 и выше,
источник