¿Cómo compararía solo los componentes de año-mes-día de 2 NSDates
?Comparando ciertos componentes de NSDate?
Respuesta
Así que aquí es como usted lo haría:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger desiredComponents = (NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit);
NSDate *firstDate = ...; // one date
NSDate *secondDate = ...; // the other date
NSDateComponents *firstComponents = [calendar components:desiredComponents fromDate:firstDate];
NSDateComponents *secondComponents = [calendar components:desiredComponents fromDate:secondDate];
NSDate *truncatedFirst = [calendar dateFromComponents:firstComponents];
NSDate *truncatedSecond = [calendar dateFromComponents:secondComponents];
NSComparisonResult result = [truncatedFirst compare:truncatedSecond];
if (result == NSOrderedAscending) {
//firstDate is before secondDate
} else if (result == NSOrderedDescending) {
//firstDate is after secondDate
} else {
//firstDate is the same day/month/year as secondDate
}
Básicamente, tomamos las dos fechas, cortamos sus bits de horas-minutos-segundos, y el que volvemos de nuevo en fechas. Luego comparamos esas fechas (que ya no tienen un componente de tiempo, solo un componente de fecha) y vemos cómo se comparan entre sí.
ADVERTENCIA: escrito en un navegador y no compilado. Implementador de advertencias
Salida este tema NSDate get year/month/day
Una vez que usted saca el día/mes/año, se puede compararlos como enteros.
Si no te gusta ese método
su lugar, se podría intentar esto ..
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy"];
int year = [[dateFormatter stringFromDate:[NSDate date]] intValue];
[dateFormatter setDateFormat:@"MM"];
int month = [[dateFormatter stringFromDate:[NSDate date]] intValue];
[dateFormatter setDateFormat:@"dd"];
int day = [[dateFormatter stringFromDate:[NSDate date]] intValue];
Y de otra manera ...
NSDateComponents *dateComp = [calendar components:unitFlags fromDate:date]; NSInteger year = [dateComp year]; NSInteger month = [dateComp month]; NSInteger day = [dateComp day];
'NSCalendar' funciona en iOS –
Impresionante, había leído en algún lado que podría no ser así, pero gracias por la verificación. –
Con el método -[NSDate compare:]
- NSDate Compare Reference
Desde iOS 8 puede usar el método -compareDate:toDate:toUnitGranularity:
de NSCalendar
.
De esta manera:
NSComparisonResult comparison = [[NSCalendar currentCalendar] compareDate:date1 toDate:date2 toUnitGranularity:NSCalendarUnitDay];
- 1. NSDate, comparando dos fechas
- 2. Comparando un NSDate con [NSDate date]
- 3. NSDateComponents de un NSDate
- 4. Componentes de NSDateComponents: fromDate y Zonas horarias
- 5. Comparando un delta de tiempo en python
- 6. Comparando dobles
- 7. Comparando YUI y Ext JS
- 8. Comparando UIImage
- 9. NSDate from NSDateComponents
- 10. Obtener NSDate de NSDate ajustado con la zona horaria
- 11. ¿Convertir una descripción de NSDate en un NSDate?
- 12. Descripción Cadena de NSDate
- 13. NSNúmero de NSDate
- 14. Http Fecha de NSDate
- 15. Restar minutos de NSDate
- 16. Cadena relativa de NSDate
- 17. ¿cómo configuro una hora de NSDate existente?
- 18. Creación de componentes: ¿unir componentes juntos?
- 19. Comparando el tiempo de dos NSDates, ignorando el componente de fecha
- 20. Findbugs y comparando
- 21. Comparando backbone.js y Dojo
- 22. Comparando C# y Java
- 23. comparando dos imágenes vectoriales
- 24. Java - ¿Comparando clases?
- 25. Comparando listas en Lisp
- 26. Comparando dos fechas
- 27. estructuras Comparando a NULL
- 28. Python: Comparando listas
- 29. Comparando cadenas en EL
- 30. Arrays Java comparando
posible duplicado de [Comparar NSDate objetos sólo en términos de día mes año] (http://stackoverflow.com/questions/3432700/compare-nsdate-objects-only-in -terms-of-year-month-day) –