Básicamente, quiero averiguar si es el día siguiente. Por lo tanto, estoy almacenando la fecha actual (por ejemplo, 2 de enero) constantemente en un plist. Pero la próxima vez que el usuario abra la aplicación, si la fecha ha cambiado (por ejemplo, el 3 de enero), quiero hacer algo. Tenga en cuenta que una simple verificación de orden ascendente no funcionaría porque no quiero saber si una fecha es posterior a otra fecha, si la diferencia es solo en horas. Necesito poder diferenciar el 2 de enero, 11:50 y el 3 de enero, 2:34 pero no el 3 de enero, 2:34 y el 3 de enero, 5:12.¿Cómo se pueden comparar dos fechas (solo fechas, no tiempo) en cacao?
Respuesta
uso el siguiente que encontré SO:
- (BOOL)isSameDay:(NSDate*)date1 otherDay:(NSDate*)date2 {
NSCalendar* calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date1];
NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date2];
return [comp1 day] == [comp2 day] &&
[comp1 month] == [comp2 month] &&
[comp1 year] == [comp2 year];
}
Uso NSCalendarDate en lugar de NSDate, y comparar lo que se conviertan de la -dayOfCommonEra
@implementation NSDate (sameDayOrNot)
- (BOOL) sameDayAsDate:(NSDate *) otherDate
{
NSCalendarDate *date1 = [[NSCalendarDate alloc] initWithTimeInterval:0 sinceDate:self];
NSCalendarDate *date2 = [[NSCalendarDate alloc] initWithTimeInterval:0 sinceDate:otherDate];
BOOL result = ([date1 dayOfCommonEra] == [date2 dayOfCommonEra]);
[date1 release];
[date2 release];
return result;
}
@end
NSCalendarDate está en desuso – Abizern
Aún no, no lo es. – NSResponder
Uh, sí, es http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/LegacyNSCalendarDate.html Obsoleto no es lo mismo que eliminar. Además, la pregunta no es sobre verificar la equivalencia de dos fechas, sino cómo saber si están en días diferentes. – Abizern
Mirando el Date Time Programming Guide le da un ejemplo de cómo para calcular la diferencia entre dos fechas como por componente: por ejemplo:
NSDate *startDate = ...;
NSDate *endDate = ...;
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:startDate
toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];
Mi versión basada en la de Neils (advertencia: no probados):
La mía es más similar a - (NSComparisonResult)compare:
en NSDate. Para comprobar si hay días en igualdad de condiciones, hacer [myDate compareDayMonthAndYear:otherDate] == NSOrderedSame
- (NSComparisonResult)compareDayMonthAndYear:(NSDate *)date
{
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *selfComponents = [calendar components:unitFlags fromDate:self];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
BOOL dayIsEqual = (selfComponents.day == dateComponents.day && selfComponents.month == dateComponents.month && selfComponents.year == dateComponents.year);
if (dayIsEqual) {
return NSOrderedSame;
}
return [self compare:date];
}
- 1. Cómo comparar dos fechas
- 2. Comparar dos fechas en JS
- 3. Comparar dos fechas en Java
- 4. ¿Cómo comparar solo la parte de fecha y no el tiempo de dos fechas?
- 5. ¿Se pueden comparar las fechas almacenadas como cadena/texto directamente?
- 6. MVC validación personalizada: comparar dos fechas
- 7. Comparar fechas en MySQL
- 8. Cómo comparar fechas en Django
- 9. Comparar dos fechas Google apps script
- 10. ¿Cómo comparar fechas en Java?
- 11. Cómo comparar las fechas en C#
- 12. Comparando dos fechas
- 13. ¿Cómo se comparan dos fechas en SQLite?
- 14. NSDate, comparando dos fechas
- 15. ¿Cómo puedo comparar dos fechas en vbscript/ASP?
- 16. ¿Comparar las fechas en DataView.RowFilter?
- 17. Comparar fechas en T-SQL, ignorando la parte de tiempo
- 18. Cómo comparar las fechas en hibernación
- 19. ¿Cómo puedo comparar dos fechas, devolver un número de días
- 20. ¿Calcula el tiempo entre dos fechas?
- 21. Diferencia en el tiempo entre dos fechas en Java
- 22. ¿Cómo comparar las fechas en LINQ?
- 23. Comparar las fechas con Parse.com
- 24. Matriz de fechas entre dos fechas
- 25. Cómo comparar dos fechas para encontrar diferencia de tiempo en SQL Server 2005, manipulación fecha
- 26. Ruby on Rails: ¿la mejor manera de comparar dos fechas?
- 27. Javascript para comparar dos fechas, desde cadenas, begin <= end
- 28. Doctrina 1,2 cómo comparar las fechas
- 29. ¿Cómo encontrar las fechas entre dos fechas especificadas?
- 30. Suma dos fechas en Java
respuesta original contiene código obsoleto, de cambio: unitFlags sin signo = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; a esto: unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay; – Borbea
Actualizó la publicación. ¡Gracias! –