NSDate *date1 = [NSDate dateWithString:@"2010-01-01 00:00:00 +0000"];
NSDate *date2 = [NSDate dateWithString:@"2010-02-03 00:00:00 +0000"];
NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1];
int numberOfDays = secondsBetween / 86400;
NSLog(@"There are %d days in between the two dates.", numberOfDays);
РЕДАКТИРОВАТЬ:
Помните, что NSDate
объекты представляют собой точные моменты времени, с ними не связана информация о часовых поясах. Когда вы конвертируете строку в дату, например, с помощью NSDateFormatter
, NSDateFormatter
преобразует время из настроенного часового пояса. Следовательно, количество секунд между двумя NSDate
объектами всегда не зависит от часового пояса.
Кроме того, в этой документации указано, что реализация времени в Какао не учитывает дополнительных секунд, поэтому, если вам нужна такая точность, вам нужно будет свернуть свою собственную реализацию.
cocoa
иcocoa-touch
поэтому этот ответ применим только к Mac OS X.Вы можете использовать что-то вроде этого:
Я считаю, что этот метод учитывает такие ситуации, как даты, которые охватывают изменение летнего времени.
источник
NSDate
объекты уже не зависят от часового пояса. Информация о часовом поясе удаляется при синтаксическом анализе дат, напримерNSDateFormatter
, чтобыNSDate
объекты представляли точные моменты времени. Следовательно, если у вас уже естьstartDate
иendDate
, эти два объекта будут находиться на расстоянии x секунд друг от друга. Часовые пояса тут ни при чем.где
date1
иdate2
находятсяNSDate
русские.Также обратите внимание на определение
NSTimeInterval
:источник
Проверить это. Он заботится о переходе на летнее время и високосном году, поскольку для расчета используется календарь iOS. Вы можете изменить строку и условия, включив минуты с часами и днями.
источник
В Swift 5 и iOS 12, в соответствии с вашими потребностями, вы можете использовать один из двух следующих способов, чтобы найти разницу между двумя датами в днях.
# 1. Использование
Calendar
«SdateComponents(_:from:to:)
метод# 2. Использование
DateComponentsFormatter
«Sstring(from:to:)
методисточник
Swift 4
Попробуйте это и посмотрите (диапазон дат со строкой):
Swift 3
источник
Вы можете найти разницу, преобразовав дату в секунды и взяв для этого временной интервал с 1970 года, а затем вы можете найти разницу между двумя датами.
источник
Чтобы найти разницу, вам нужно получить текущую дату и дату в будущем. В следующем случае я использовал 2 дня в качестве примера будущей даты. Рассчитано:
2 days
*24 hours
*60 minutes
*60 seconds
. Мы ожидаем, что количество секунд за 2 дня составит 172 800.источник