Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

113
Visualizações
JSON con recuentos de todas las ocurrencias para todas las fechas entre una fecha desde y hasta

Tengo la siguiente matriz de objetos.

 const monthlyList = [ { "leave_id":119, "employee_id":"25528", "from_date":"2022-03-10", "to_date":"2022-03-11", "employee_name":"Name 1" }, { "leave_id":120, "employee_id":"25529", "from_date":"2022-03-10", "to_date":"2022-03-13", "employee_name":"Name 2" }, { "leave_id":121, "employee_id":"25530", "from_date":"2022-03-15", "to_date":"2022-03-18", "employee_name":"Name 3" }, { "leave_id":123, "employee_id":"25530", "from_date":"2022-03-20", "to_date":"2022-03-20", "employee_name":"Name 3" } ]

Estoy tratando de mostrar el recuento de eventos de licencia para cada día en un calendario usando FullCalendar. Para esto, estoy tratando de obtener una matriz en el siguiente formato

 [ { "date":"2022-03-10", "count":2 }, { "date":"2022-03-11", "count":2 }, { "date":"2022-03-12", "count":1 } --- etc ]

Es decir, si hay dos hojas en la misma fecha, el conteo debe ser 2. Además, debe calcular el conteo de todas las fechas entre from_date y to_date para que pueda mostrar el conteo en el calendario para todas las fechas que caen entre el rango.

Uso el siguiente código usando lodash para agrupar según from_date y to_date y desde allí puedo crear la matriz anterior. Pero no estoy seguro de cómo hacerlo para los días intermedios

 let groupedListFrom = _.groupBy(monthlyList, "from_date"); let groupedListTo = _.groupBy(monthlyList, "to_date");

Será muy útil si alguien me puede ayudar aquí. Gracias

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Un posible enfoque usando reduce en lugar de Lodash.
Usé https://gist.github.com/miguelmota/7905510 como ayuda para obtener objetos de fecha entre dos fechas determinadas.

 const monthlyList = [ { "leave_id":119, "employee_id":"25528", "from_date":"2022-03-10", "to_date":"2022-03-11", "employee_name":"Name 1" }, { "leave_id":120, "leave_id":"25529", "from_date":"2022-03-10", "to_date":"2022-03-13", "employee_name":"Name 2" }, { "leave_id":121, "employee_id":"25530", "from_date":"2022-03-15", "to_date":"2022-03-18", "employee_name":"Name 3" }, { "leave_id":123, "employee_id":"25530", "from_date":"2022-03-20", "to_date":"2022-03-20", "employee_name":"Name 3" } ] //a function to get Date objects between two given dates (inclusive) //https://gist.github.com/miguelmota/7905510 const getDates = (startDate, endDate) => { const dates = [] let currentDate = startDate const addDays = function (days) { const date = new Date(this.valueOf()) date.setDate(date.getDate() + days) return date } while (currentDate <= endDate) { dates.push(currentDate) currentDate = addDays.call(currentDate, 1) } return dates } let x = Object.values(monthlyList.reduce((acc,{leave_id,employee_id,from_date,to_date,employee_name})=>{ const dates = getDates(new Date(from_date), new Date(to_date)); dates.forEach((date) => { let strippedDate = date.toISOString().substring(0,10); if(!acc[strippedDate])acc[strippedDate]={date:strippedDate,count:0}; acc[strippedDate].count+=1 }) return acc; },{})) console.log(x)

about 4 years ago · Juan Pablo Isaza Relatório

0

var DateTime = require('luxon').DateTime; let leavesArray = {}; monthlyList.forEach(x => { let a = DateTime.fromFormat(x.from_date,"yyyy-MM-dd") let b = DateTime.fromFormat(x.to_date,"yyyy-MM-dd") while (a <= b) { let date = a.toFormat("yyyy-MM-dd"); if (leavesArray[date]) { leavesArray[date]["count"]++; } else { leavesArray[date] = {} leavesArray[date]["count"] = 1; } a = a.plus({days: 1}) } })

Solución de trabajo de Node Js

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda