[quote=GuiCunha]hum pode cre, isso jah ajudou muito.
Assim, eu preciso saber isso por que tenho uma tela aqui que eh uma agenda, então ao gerar um compromisso mensal, caso o usuário gere esse compromisso na quinta segunda feira de cada mês, tenho que fazer uma verificação, pois nem todos os meses tem 5 semanas, então os que tiverem apenas 4 semanas terão que receber esse compromisso na quarta segunda feira do mês, já os que tiverem 5 semanas receberão o compromisso na quinta segunda-feira.
Não se ficou bem claro, mais é por isso que preciso saber. :D[/quote]
Sua lógica não tem muito sentido (pelo menos para mim).
Se a pessoa agendou uma quinta-feira o algoritmo é : para cada quinta-feira do mês , agende.
Se o mês termina na quarta-feira, paciência. Não ha que marcar a quarta-feira;
Se a tarefa pode ser continuada no mês seguinte, então continua marcando quinta-feira e pronto. Se o evento é semanal não importa o mês em que vc está.
Agora, se a tarefa tem que ser executada N vezes no mês e não existem N quintas-feiras, ai sim, ha que considerar usar a quarta-feira anterior, mas isso não é uma tarefa semanal. Eu poderia simplesmente dividir os dias uteis por N e intercalar um agendamento a cada K dias sem precisar que caia no mesmo dia da semana.
Seja como for, eu usaria o primeiro algoritmo. A cada Q-Feira do mês, agende. Se ha um numero necessários de vezes seria, Enqanto houver vezes para agendar, agende a cada Q-feira, se ela for do mesmo mês. Se não, agende no dia anterior que seja do mesmo mês. Este algoritmo pode levar a agendamento na Quinta-Feira e depois na sexta também (se a sexta é o ultimo dia do mes e ainda faltam eventos para marcar).
Se que vc esplique exactamente a regra de negocio tudo o que vc está falando soa muito estranho e heterodoxo.