Ir ao conteúdo

Javascript (Banco de Dados) Pegar menor valor de data de duas colunas e contar os dias!


Ir à solução Resolvido por Rui Guilherme,

Posts recomendados

Postado

Tenho duas colunas onde são registradas datas e horas, a coluna "DataDoIndiciamento" e "DataDoRecebimentoDaDenuncia". A partir dessas duas colunas eu preciso pegar a data com o menor tempo da coluna "DataDoIndiciamento" ate "DataDoRecebimentoDaDenuncia" e então jogar na tela o numero de dias de uma data para a outra.

 

apaga83.png.8d86efae61360e38928e56639c55fabf.png

 

No caso eu precisaria pegar da coluna "DataDoIndiciamento" o valor [2021-03-17 00:00:00.000] já que esse seria o menor tempo, tirar as horas e pegar apenas a data e então pegaria da coluna "DataDoRecebimentoDaDenuncia" da mesma linha o valor referente [24-03-2021 00:00:00.000], tiraria as horas e faria a contagem do número de dias da "DataDoIndiciamento" ate "DataDoRecebimentoDaDenuncia" que no caso daria 7 dias e então mostraria na tela esse resultado.

 

Eu já tenho uma public List da dados que uso para pegar as colunas dessa tabela já montada:

 

// --------- graficos com base na TR_CRIME_AUTOR ---------
        public List<CrimeAutorModel> GetAllCrimeAutorModel()
        {
            using (IDbConnection cn = ConnectionAnaliseCriminal)
            {
                try
                {
                    cn.Open();
                    string query = "SELECT COD_CRIME_AUTOR"                                  
                                   + ", DataDoIndiciamento"
                                   + ", DataDoRecebimentoDaDenuncia"                                   
                                   + " FROM dbo.TR_CRIME_AUTOR"
                                   + " WHERE DT_EXCLUSAO_LOGICA IS NULL";

                    return cn.Query<CrimeAutorModel>(query).ToList();
                }
                finally
                {
                    cn.Close();
                }
            }
        }

 

E também já tenho o Ajax montado na controller que pega da dados e uso para passar no JS:

 

// --------- graficos com base na TR_CRIME_AUTOR ----------
        [HttpGet] public JsonResult AjaxGetAllCrimeAutorModel() => Json(new DashboardDados().GetAllCrimeAutorModel());

 

E tenho a base da função:

 

async function shortestTimeDays() {

    let resultado, numberOfDays = 0;

    //chama o método ajax que trás todos os objetos
    try {
        const resposta = await fetch(`/Dashboard/AjaxGetAllCrimeAutorModel`);
        resultado = await resposta.json();
    } catch (e) {
        console.error("Erro ao realizar fetch");
        return console.error(e);
    }
  
}

 

Agora gostaria de saber como devo proceder no javascript para fazer o meu objetivo e poder jogar na tela o resultado.

 

apaga84.png.10a23a5db2bd7a47f463b593f5ce3c15.png

<div class="blocoProcessos" style="margin-bottom: 2em;">
  <div style="width: 100%;text-align:center;">
    <div>
      <span style="font-size: 20px;font-weight: 400;">Tempo minimo fase pré-processual</span>
    </div>
    <hr class="hrBlocoProcesso" style="margin-bottom: 5px;margin-top: 10px;" />
    <div style="display: flex;flex-direction: column;align-items: center;">
      <span>Tempo (em dias)</span>
      <span style="font-size: 25px;">*</span>
    </div>
  </div>
</div>

 

Grato Mizrain.

  • Solução
Postado

@Mizrain Phelipe Sá

 

Você precisa pegar essa String e usar o Date, porém, uma das suas datas são inválidas ([24-03-2021 00:00:00.000]) e isso pode causar uma issue no seu código, eu recomendo dar uma olhadinha aqui:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date

 

 // Retorna a diferenças de dias entre duas datas :D 
function CalcularDias(a, b) {
  return Math.floor((b.getTime() - a.getTime()) / 86400000);
}

async function shortestTimeDays() {

  try {
    //const resposta = await fetch(`/Dashboard/AjaxGetAllCrimeAutorModel`);
    
    //vou supor um resultado: (usei como exemplo os dados da print do banco de dados, porém coloquei outro exemplo para dar menos de 7 dias)
    const resultado = [
      {
        DataDoIndiciamento: '2021-03-17 00:00:00.000', 
        DataDoRecebimentoDaDenuncia: '2021-03-24 00:00:00.000'
    	},
      {
        DataDoIndiciamento: '2021-03-01 00:00:00.000', 
        DataDoRecebimentoDaDenuncia: '2021-03-28 00:00:00.000'
      },
      {
        DataDoIndiciamento: '2021-03-01 00:00:00.000', 
        DataDoRecebimentoDaDenuncia: '2021-03-03 00:00:00.000'
      }
    ]
    
    // Vou rodar os valores de dentro da array resultado e colocar em props.
    resultado.map((props) => {
      // vou extraiar as duas datas de dentro de props
      const { DataDoIndiciamento, DataDoRecebimentoDaDenuncia } = props
      
      //aqui eu faço a "conversão" de string para Date,
      const Indiciamento = new Date(DataDoIndiciamento)
      const Denuncia = new Date(DataDoRecebimentoDaDenuncia)
      
      //aqui eu pego a diferenças de dias..;
      const tempoPercorrido = CalcularDias(Indiciamento, Denuncia)
      
      if (tempoPercorrido >= 7) {
        // Aqui você pode exibir o toast, model, alert...
        console.log("Nice, se passou 7 dias, quantidade: " + tempoPercorrido)
      }
      else {
        // Aqui você pode exibir o toast, model, alert...
        console.log("Ainda não se passam 7 dias, quantidade: " + tempoPercorrido)
      }
      
    })
    
  } catch (e) {
    console.error("Erro ao realizar fetch");
    return console.error(e);
  }
}

Você pode testar e ver funcionando aqui: https://codepen.io/ruiguilherme/pen/RwKoOmK?editors=1011

  • Curtir 1
Postado

@Mizrain Phelipe Sá Eu apenas simulei um resultado do fetch, na sua rota do (/Dashboard/AjaxGetAllCrimeAutorModel) deve retornar um objeto ou array com os dados, certo? Você só precisa organizar o json e salvar na const resultado e seguir o resto do código

 

Para puxar do banco de dados eu teria que fazer um Select no banco de dados, eu recomendo você pode usar o Sequelize e o NodeJS - pode optar pelo NanoExpressJS - ou se quiser algo mais profissional você pode usar o AdonisJS, e se quiser algo de alto desempenho pode usar o uWebSocketsJS.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!