Estoy tratando de evitar una validación de fecha que se niega a tomar nada antes que mañana.
Hasta ahora tengo esto:NSNúmero de NSDate
NSDate *dateY = [NSDate dateWithTimeIntervalSinceNow:-86400];
// Negative one day, in seconds (-60*60*24)
NSLog(@"%@", [NSDate date]);
// "yyyy-MM-dd HH:mm:ss Z", accurate assuming Z = +0000
NSLog(@"%@", dateY);
// "yyyy-MM-dd HH:mm:ss Z", same accuracy (minus one day)
Eso es grande, pero no es una dateY
NSNumber
. Necesito un NSNumber
para la comparación, pero no puedo encontrar nada que funcione. (Yo no sé ni cómo un NSNumber
puede haber 2011-04-14 13:22:29 +0000
, de todos modos ...)
puedo usar para convertir un NSDateFormatter
NSDate
en un NSString
, por lo que si sería posible tomar esa cadena y convertirlo en el requiere NSNumber
(en lugar de convertir directamente el NSDate
en un NSNumber
, que parece que no encuentro ayuda con ninguno), estaría bien.
- (BOOL)validateDueDate:(id *)ioValue error:(NSError **)outError {
NSDate *dateY = [NSDate dateWithTimeIntervalSinceNow:-86400];
NSNumber *tis1970 = [NSNumber numberWithDouble:[dateY timeIntervalSince1970]];
NSLog(@"NSNumber From Date : %@", tis1970);
NSLog(@"Date From NSNumber : %@", [NSDate dateWithTimeIntervalSince1970:[tis1970 doubleValue]]);
// Due dates in the past are not valid
// Enforced that a due date has to be >= today's date
if ([*ioValue compare:[NSDate date]] == NSOrderedAscending) {
if (outError != NULL) {
NSString *errorStr = [[[NSString alloc] initWithString:@"Due date must be today or later."] autorelease];
NSDictionary *userInfoDictionary = [NSDictionary dictionaryWithObject:errorStr forKey:@"ErrorString"];
NSError *error = [[[NSError alloc]
initWithDomain:TASKS_ERROR_DOMAIN
code:DUEDATE_VALIDATION_ERROR_CODE
userInfo:userInfoDictionary] autorelease];
*outError = error;
}
return NO;
} else {
return YES;
}
}
En este momento, el usuario no se le permite elegir una fecha antes de mañana. errorStr
mentiras. Antes de hoy, tiene más sentido que el día de mañana como regla para negarse a guardar la fecha, así que he estado luchando con esto para permitirme usar ayer en lugar de hoy, en lugar de buscar algo más profundo.
Editar: El uso de NSOrderedSame
permite seleccionar cualquier fecha sin un error. Eso no servirá.
si quieres sólo para comparar la igualdad, se puede usar '[fecha isEqualToDate: dateY];' – Seega
¿Por qué necesita un NSNumber para la comparación? ¿Ya tienes un NSNumber para comparar? ¿Que representa? –
¿Qué es ioValue? ¿Un número? ¿Una cuerda? –