Pregunta

Esto es un poco extraño, pero ¿es posible usar un nscalendar (o cualquier componente, para el caso) para descubrir cuál sería la fecha del próximo "primer martes del mes"?

Por ejemplo, hoy es el jueves 25 de marzo de 2010. El próximo "primer martes del mes" sería el 6 de abril. Del mismo modo, si estuviera buscando el próximo "primer martes del mes" el 1 de abril, aún sería el 6 de abril.

¿Cómo harías esto?

¡¡¡¡¡Muchas gracias!!!!!

¿Fue útil?

Solución

El siguiente código calcula el primer martes de una combinación de mes/año determinado. Está escrito en Macruby Debido a que eso es con lo que lo intenté, pero no deberías tener problemas para convertirlo en Objetivo-C adecuado, es solo una sintaxis diferente (me encanta MacRuby para probar rápidamente una idea):

dc = NSDateComponents.alloc.init
# Set month to April 2010
dc.setYear 2010
dc.setMonth 4

dc.setWeekday 3 # 1 = Sunday, 2 = Monday, ...
dc.setWeekdayOrdinal 1 # We want the first weekday of the month

cal = NSCalendar.alloc.initWithCalendarIdentifier NSGregorianCalendar
date = cal.dateFromComponents dc
date.description # => "2010-04-06 00:00:00 +0200"

Le dejo que determine el "próximo primer martes" desde una fecha determinada: primero haga el cálculo para el mes de la fecha actual y si el resultado está en el pasado, hazlo nuevamente para el mes siguiente. Usar -[NSCalendar components:fromDate:] Para obtener el combo mes/día de un NSDate determinado.

Otros consejos

Desafortunadamente, no puedo verificar la incapacidad de este código, pero algunos deberían verse así:

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setWeekday:2]; // Monday
[components setMonth:5]; // May
[components setYear:2008];
[components setWeekdayOrdinal:1]
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:components];

Para muestras e información de detalle, consulte esto guía

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top