Мне интересно, есть ли какая-то новая и отличная возможность получить количество дней между двумя NSDates в Swift / "новом" какао?
Например, как в Ruby, я бы сделал:
(end_date - start_date).to_i
ios
swift
date
date-difference
Линус
источник
источник
Ответы:
Вы также должны учитывать разницу во времени. Например, если вы сравните даты
2015-01-01 10:00
и2015-01-02 09:00
, дни между этими датами вернутся как 0 (ноль), поскольку разница между этими датами составляет менее 24 часов (это 23 часа).Если ваша цель - получить точное число дней между двумя датами, вы можете обойти эту проблему следующим образом:
Версия Swift 3 и Swift 4
источник
calendar.date(bySettingHour: 12, minute: 00, second: 00, of: calendar.startOfDay(for: firstDate))
startOfDay()
кажется ненужным):calendar.date(bySettingHour: 12, minute: 0, second: 0, of: firstDate)
.Вот мой ответ для Swift 2:
источник
today
иtomorrow
Я вижу пару ответов Swift3, поэтому добавлю свой:
Именование кажется более быстрым, оно состоит из одной строки и с использованием новейшего
dateComponents()
метода.источник
Вот очень хорошее
Date
расширение, чтобы получить разницу между датами в годах, месяцах, днях, часах, минутах, секундахисточник
date
должен бытьsinceDate
в параметрах функции.days
и он отлично работает.func years(since date: Date) -> Int? { return Calendar.current.dateComponents[.year], from: date, to: self).years }
, и вы могли бы это назватьlet y = date1.years(since: date2)
. Это могло бы больше соответствовать современным соглашениям об именах.Я перевел свой ответ на Objective-C
результат
Самым сложным было то, что автозаполнение настаивает на том, чтобы fromDate и toDate были
NSDate?
, но на самом деле они должны бытьNSDate!
такими, как показано в ссылке.Я не понимаю, как будет выглядеть хорошее решение с оператором, так как вы хотите указать единицу измерения по-разному в каждом случае. Вы можете вернуть временной интервал, но от этого мало что получите.
источник
.DayCalendarUnit
устарел. Я считаю, что теперь вам следует использовать.CalendarUnitDay
вместо этого.let components = cal.components(.Day, fromDate: startDate, toDate: endDate, options: [])
.Day
настоящее времяОбновление для Swift 3 iOS 10 Beta 4
источник
Вот ответ для Swift 3 (протестировано для iOS 10 Beta)
Тогда вы можете назвать это так
источник
Swift 3. Спасибо Emin Buğra Saral выше за
startOfDay
предложение.Использование:
источник
Вещи, встроенные в Swift, по-прежнему очень простые. Как и должно быть на этой ранней стадии. Но вы можете добавлять свои собственные данные с риском, связанным с операторами перегрузки и глобальными функциями домена. Однако они будут локальными для вашего модуля.
источник
Вот мой ответ для Swift 3:
источник
Еще почти нет стандартной библиотеки для Swift; только простые базовые числовые, строковые и коллекционные типы.
Вполне возможно определить такие сокращения с помощью расширений, но что касается реальных готовых API, то «нового» какао не существует; Swift просто сопоставляется напрямую с теми же старыми подробными API-интерфейсами Cocoa, которые уже существуют.
источник
Я собираюсь добавить свою версию, хотя этой ветке уже год. Мой код выглядит так:
Надеюсь, это кому-то поможет.
Ура,
источник
Метод Эрин обновлен до Swift 3, показывает дни с сегодняшнего дня (без учета времени суток)
источник
Это возвращает абсолютную разницу в днях между некоторыми
Date
и сегодняшними днями :а затем используйте его:
источник
Вы можете использовать следующее расширение:
Тогда вы можете назвать это так:
источник
Swift 3.2
источник
Все хорошо. Но для локализаций нам нужно вычислить количество десятичных дней между двумя датами. поэтому мы можем обеспечить устойчивый десятичный формат.
источник
Тогда используйте это как
источник
Это обновленная версия ответа Эмина для Swift 5, которая включает предложение использовать полдень вместо полуночи в качестве окончательного времени для сравнения дней. Он также обрабатывает потенциальный отказ различных функций даты, возвращая необязательный.
источник
Swift 3 - дней с сегодняшнего дня до даты
Вызовите такую функцию
источник
Более простой вариант - создать расширение на Дата
источник
если вам нужны дни и часы месяца в качестве строки, используйте это
var завтра = Calendar.current.date (byAdding: .day, value: 1, to: Date ())!
пусть dc = завтра.completeOffset (from: Date ())
источник
Хороший удобный лайнер:
источник
источник
Решение Swift 5.2.4:
источник
Версия 2017 г., скопируйте и вставьте
источник
источник