Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda - Calcular quantidade de dias atravez de duas datas


chris~

Pergunta

Gent seguinte, minha professora me passo um trab tenso, ou não sei la

tenho que calcular a quantidade de dias entre duas datas, essa é a part do trabalho q não consigo faze

tipo eu informo duas datas

01/01/2013

31/12/2013

e o resultado da conta tem q ser 365 dias

o algoritimo tem q leva em consideração os meses de 28,29,30 e 31 dias e não pode ser usado a biblioteca If

existe algum comando q possa me ajudar a faze isso mais rapido ou terei q usar milhoes de linhas de codgos? '-'

se alguém puder me aponta para uma maneira mais "simples" do que muitas linhas de cod em if por favor me avisa

agradeço a atenção

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá, isto pode ser feito usando uma struct e uma Matriz.

Assim:

typedef struct {
int uma variável para dia;               
int variável para mes;
int variável para ano;
} nome da estrutura;
e uma matriz para os mêses do ano.
int dias_mes [?] [?] = {{ !!!!!!!!! }};

É uma dica, o resto é com você.

ABRAÇOS

Editado por roccoC/C++
Link para o comentário
Compartilhar em outros sites

  • 0
Gent seguinte, minha professora me passo um trab tenso, ou não sei la

tenho que calcular a quantidade de dias entre duas datas, essa é a part do trabalho q não consigo faze

tipo eu informo duas datas

01/01/2013

31/12/2013

e o resultado da conta tem q ser 365 dias

o algoritimo tem q leva em consideração os meses de 28,29,30 e 31 dias e não pode ser usado a biblioteca If

existe algum comando q possa me ajudar a faze isso mais rapido ou terei q usar milhoes de linhas de codgos? '-'

se alguém puder me aponta para uma maneira mais "simples" do que muitas linhas de cod em if por favor me avisa

agradeço a atenção

Um pouco de café ... e milhões de linhas de código depois, aí está:

#include <stdio.h>

// as datas devem estar no formato dd/mm/yyyy 

int getNumberDays(const char *startDate, const char *endDate)
{
    int month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int startDay;
    int startMonth;
    int startYear;
    int endDay;
    int endMonth;
    int endYear;
    int nDays = 0;
    
    startDay   = ((startDate[0] & 0xF) * 10) + (startDate[1] & 0xF);
    startMonth = ((startDate[3] & 0xF) * 10) + (startDate[4] & 0xF);
    startYear  = ((startDate[6] & 0xF) * 1000) + ((startDate[7] & 0xF) * 100) + ((startDate[8] & 0xF) * 10) + (startDate[9] & 0xF);

    endDay   = ((endDate[0] & 0xF) * 10) + (endDate[1] & 0xF);
    endMonth = ((endDate[3] & 0xF) * 10) + (endDate[4] & 0xF);
    endYear  = ((endDate[6] & 0xF) * 1000) + ((endDate[7] & 0xF) * 100) + ((endDate[8] & 0xF) * 10) + (endDate[9] & 0xF);

    if(startDay == endDay && startMonth == endMonth && startYear == endYear) return 0;

    if(!(startYear % 4))
    {
        if(startYear % 100) month[1] = 29; // ano bissesto
        
        else
            if(!(startYear % 400)) month[1] = 29; // ano bissesto
        
    }

    for(;;)
    {
        int i;
        
        for(i = 1; i < 13; i++)
        {
            if(startMonth == i)
            {
                if(startDay == month[i - 1]) // se é o ultimo dia do mês
                {
                    startDay = 1;

                    if(startMonth != 12)
                    {
                        startMonth++;
                    }
                    else // se é o ultimo mês do ano
                    {
                        startMonth = 1;
                        startYear++;

                        if(!(startYear % 4))
                        {
                            if(startYear % 100) month[1] = 29; // ano bissesto
                            else
                            {
                                if(!(startYear % 400)) month[1] = 29;
                                else month[1] = 28;
                            }
                        }
                        else month[1] = 28;
                    }
                }
                else
                {
                    startDay++;
                }
                
                break;
            }
        }

        nDays++;
        if(startDay == endDay && startMonth == endMonth && startYear == endYear) return nDays + 1;
    }
}

    
int main()
{
    printf("Days = %d\n", getNumberDays("01/01/2013", "31/12/2013"));
    return 0;
}

Editado por goldbach
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...