Как определить, прошло ли NSDate (включая время)

Как определить, прошло ли NSDate (включая время)? Мне нужно в основном сравнить сегодняшнюю дату с датой в БД, но я в тупике.


person TheLearner    schedule 05.01.2012    source источник


Ответы (3)


Попробуй это:

if ([someDate timeIntervalSinceNow] < 0.0) {
    // Date has passed
}
person mattjgalloway    schedule 05.01.2012
comment
Я поместил это в метод категории, чтобы вы могли использовать someDate.isInPast. - person Peter DeWeese; 06.01.2012
comment
ваш код сравнивает только дату, а не время. Как будто я сравниваю один и тот же день, но разное время, например: 01.01.2015 5:00:00 и 01.01.2015 7:00:00 с этой датой, которая показывает мне, что дата прошла. - person Deepak; 24.08.2015
comment
+ Папа, не понимаю, что ты имеешь в виду. Согласно документации этот метод должен быть идеальным: интервал времени между объектом даты и текущей датой и временем. (только для чтения) Если объект даты предшествует текущей дате и времени, значение этого свойства отрицательное. - person Erik van der Neut; 08.06.2016
comment
Для использования в расширении даты: func isPast() -> Bool { if (self.timeIntervalSinceNow < 0.0) { return true } else { return false } } - person AppreciateIt; 04.09.2017

вам нужно использовать сравнение NSDate, многие ответы здесь помогут вам.

iOS: сравнение двух дат

логика потребует настройки, но это должно направить вас в правильном направлении:

- (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
comment
На заметку о стиле кодирования: ваш второй параметр действительно должен называться что-то вроде 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
comment
или сделайте это встроенным: ([[NSDate date] timeIntervalSince1970] › [yourDate timeIntervalSince1970]) - person Simon Withington; 05.01.2012
comment
Я просто предлагал более общее решение для сравнения дат - сравнение даты с настоящим моментом - это скорее нишевый случай. Однако на практике вы, вероятно, просто использовали бы timeIntervalSinceNow в этом конкретном сценарии. - person Simon Withington; 05.01.2012