Как определить, прошло ли NSDate (включая время)? Мне нужно в основном сравнить сегодняшнюю дату с датой в БД, но я в тупике.
Как определить, прошло ли NSDate (включая время)
Ответы (3)
Попробуй это:
if ([someDate timeIntervalSinceNow] < 0.0) {
// Date has passed
}
person
mattjgalloway
schedule
05.01.2012
Я поместил это в метод категории, чтобы вы могли использовать
someDate.isInPast.
- person Peter DeWeese; 06.01.2012
ваш код сравнивает только дату, а не время. Как будто я сравниваю один и тот же день, но разное время, например: 01.01.2015 5:00:00 и 01.01.2015 7:00:00 с этой датой, которая показывает мне, что дата прошла.
- person Deepak; 24.08.2015
+ Папа, не понимаю, что ты имеешь в виду. Согласно документации этот метод должен быть идеальным: интервал времени между объектом даты и текущей датой и временем. (только для чтения) Если объект даты предшествует текущей дате и времени, значение этого свойства отрицательное.
- person Erik van der Neut; 08.06.2016
Для использования в расширении даты:
func isPast() -> Bool { if (self.timeIntervalSinceNow < 0.0) { return true } else { return false } }
- person AppreciateIt; 04.09.2017
вам нужно использовать сравнение NSDate, многие ответы здесь помогут вам.
логика потребует настройки, но это должно направить вас в правильном направлении:
- (BOOL)date:(NSDate*)date isBefore:(BOOL)before otherDate:(NSDate*)otherDate ;
{
if(before && ([date compare:otherDate] == NSOrderedAscending))
return YES;
if (!before && ([date compare:otherDate] == NSOrderedDescending))
return YES;
}
использование:
if([self date:yourDate isBefore:YES otherDate:[NSDate date]])
person
Nik Burns
schedule
05.01.2012
На заметку о стиле кодирования: ваш второй параметр действительно должен называться что-то вроде
isBefore:. Чтение вслух date:X isBefore:YES/NO otherDate:Y звучит намного лучше, чем дата:X is:YES/NO otherDate:Y.
- person Taum; 16.12.2014
Ты можешь использовать
[NSDate date];
чтобы получить объект NSDate, представляющий текущее время и дату.
Затем сравните это с датой, которую вы анализируете, например:
if ([currentDate timeIntervalSince1970] > [yourDate timeIntervalSince1970]) {
// yourDate is in the past
}
вы можете использовать это, чтобы сравнить любые две даты. Надеюсь это поможет.
person
Simon Withington
schedule
05.01.2012
или сделайте это встроенным: ([[NSDate date] timeIntervalSince1970] › [yourDate timeIntervalSince1970])
- person Simon Withington; 05.01.2012
Я просто предлагал более общее решение для сравнения дат - сравнение даты с настоящим моментом - это скорее нишевый случай. Однако на практике вы, вероятно, просто использовали бы timeIntervalSinceNow в этом конкретном сценарии.
- person Simon Withington; 05.01.2012