Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PJM

Comparar Datas

Mensagens Recomendadas

PJM

int compare_dates(s_date date1, s_date date2) //Compara as datas
{
if ( (date1.day == date2.day) && (date1.month == date2.month) && (date1.year == date2.year) ) return 0; //Data 1 == Data 2 
else if ( (date1.day <= date2.day) && (date1.month <= date2.month) && (date1.year <= date2.year) ) return -1; //Data 1 < Data2
else return 1; //Data1 > Data2
}

Isto funciona na maioria dos casos mas por exemplo quando meto:

Data1: 15/5/2010

Data2: 2/2/2011

E dá-me return 1, ou seja Data1 > Data2

Coisa que não é possível... está a escapar-me algo de lógica :hmm:

Alguém poderia dar uma olhadela? (peço desculpa por vários posts mas é que tenho trabalho para entregar 4ª e não sei como resolver estes problemas)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Yep, é um problema de lógica.

Repara, na tua comparação para datas, tens a coisa encadeada... não pode. Isso só vai dar correcto se o dia_1 for menor que o dia_2 E o mês_1 for menor que o mês_2 E o ano_1 for menor que o ano_2.

Isto é, só datas com o dia, o mês e o ano menores que a outra data serão menores. Eu faria assim:

int compare_dates(s_date date1, s_date date2) //Compara as datas
{
    int difAnos = comparaNums(date1.year, date2.year);
    int difMeses = comparaNums(date1.month, date2.month);
    int difDias = comparaNums(date1.day, date2.day);

    return (difAnos != 0) ? difAnos : ( (difMeses != 0) ? difMeses : ( (difDias != 0) ? difDias : 0 ) );
}

int comparaNums(int num1, int num2)
{
    if(num1 < num2)
        return -1;
    else if(num1 > num2)
        return 1;
    else
        return 0;
}


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.