Я работаю над приложением, требующим проверки срока выполнения домашней работы. Я хочу знать, наступит ли срок оплаты в течение следующей недели, и если это так, то выполнить действие.
Большая часть документации, которую я смог найти, находится в Objective-C, и я не могу понять, как это сделать в Swift. Спасибо за помощь!!
153
Date
класс. Он соединен сNSDate
, но это называетсяDate
.Ответы:
Мне нравится использовать расширения, чтобы сделать код более читабельным. Вот несколько расширений NSDate, которые помогут очистить ваш код и упростить его понимание. Я поместил это в файл sharedCode.swift:
Теперь, если вы можете сделать что-то вроде этого:
источник
return self.compare(dateToCompare) == NSComparisonResult.OrderedDescending
NSDateComponents
существует. Есть много крайних случаев, которые не обрабатываются должным образом, и нет смысла не добавлять к нимComparable
соответствиеNSDate
. Я бы порекомендовал использовать решение Джона .date1 < date2
Если вы хотите поддержать
==
,<
,>
,<=
, или>=
дляNSDate
с, вы просто должны заявить об этом где - то:источник
Comparable
является потомкомEquatable
протокола, поэтому вам не нужно декларировать соответствие обоим.==
,<
,>
и т.д., вы будете получать результат сравнения их адресов в памяти, а не сравнение их реальной стоимости. В Swift они по-прежнему рассматриваются как ссылки, поэтому я думаю, что выбор был либо (1) сохранять сравнения по указателю, как в ObjC, либо (2) устранять путаницу, не предоставляя реализацию для сравнений.Array.maxElement()
, что и т. Д. Затем автоматически доступны массивы NSDates.Вот как вы сравниваете две NSDates в Swift, я только что протестировал их на игровой площадке XCode:
Итак, чтобы проверить, будет ли дата
dueDate
в течение недели с этого момента :источник
Я всегда делал это в одной строке:
Все еще читается в
if
блокеисточник
В Swift3
Date
структура вFoundation
now реализуетComparable
протокол. Итак, предыдущиеNSDate
подходы Swift2 заменены Swift3Date
.Заметка ...
В Swift3,
Date
естьstruct
, это означает , что онаvalue type
.NSDate
этоclass
, этоreference type
.источник
источник
Если вы хотите сравнить даты с гранулярностью (точно такой же день или год и т. Д.) На swift 3.
Для других календарных сравнений измените .day на;
.год .месяц .день .час. минута .секунда
источник
Swift уже реализует сравнение дат, просто используйте date1> date2 и так далее.
источник
в Swift 3 дата сопоставима, поэтому мы можем напрямую сравнивать даты как
или в качестве альтернативы
лучший способ создания
extension
на свиданиииспользование
let isGreater = date1.isGreater(than: date2)
источник
Эта функция сработала для меня, чтобы сравнить, была ли одна дата (startDate) после endDate, где обе были определены как переменные NSDate:
источник
реализация в
Swift
источник
источник
dateAdded является переменной NSDate в моем объекте
источник
У нас есть сценарий, чтобы проверить текущее время ложь два раза (две даты). Например, я хочу проверить текущую ложь между временем открытия клиники (больницы) и временем закрытия.
Используйте простой код.
источник
Для swift 3 вы можете использовать приведенную ниже функцию для сравнения двух дат.
toGranularity может быть изменено в соответствии с ограничениями, к которым вы хотите применить свое сравнение.
источник
Продлить на СашаЗ
Swift iOS 8 и выше Когда вам нужно больше, чем просто сравнение больших или меньших дат. Например, это тот же день или предыдущий день, ...
Примечание: никогда не забывайте часовой пояс. Часовой пояс календаря имеет значение по умолчанию, но если вам не нравится значение по умолчанию, вы должны установить часовой пояс самостоятельно. Чтобы узнать, какой сегодня день, вам нужно знать, в каком часовом поясе вы спрашиваете.
Используйте это так:
Из более сложного примера. Найти и отфильтровать все даты в массиве, которые относятся к тому же дню, что и «findThisDay»:
источник