es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ordenar fechas por semana y calcular la suma utilizando nodeJS.

Tengo un grupo de valores de matriz con ‘Fecha de trabajo’ y ‘Horas de trabajo’ como se muestra a continuación. Estas fechas pueden ser cualquier fecha, pero es probable que sean fechas consecutivas. Por lo tanto, quiero calcular el total de horas de trabajo de cada semana, basándome en esas fechas. Estoy usando NodeJs y moment.Js. Por favor, ayúdame a obtener esta salida esperada usando Nodejs.

Datos actuales:

{ Working_date: '2021-12-20', Working_hours: '1' }
{ Working_date: '2021-12-21', Working_hours: '2' }
{ Working_date: '2021-12-22', Working_hours: '2' }
{ Working_date: '2021-12-25', Working_hours: '5' }
{ Working_date: '2021-12-23', Working_hours: '4' }
{ Working_date: '2021-12-24', Working_hours: '2' }

Datos esperados:

{
   Working_Startdate: '2021-12-20',
   Working_Enddate: '2021-12-24',
   TotalWorking_hours: 16
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para calcular las horas de trabajo totales de cada semana, primero necesitas agrupar los valores del arreglo por semana. Puedes usar moment.js para analizar las fechas y obtener los números de semana correspondientes. Aquí hay una posible solución utilizando Node.js:

    const moment = require('moment');
    
    // Datos de ejemplo
    const data = [
      { Working_date: '2021-12-20', Working_hours: '1' },
      { Working_date: '2021-12-21', Working_hours: '2' },
      { Working_date: '2021-12-22', Working_hours: '2' },
      { Working_date: '2021-12-25', Working_hours: '5' },
      { Working_date: '2021-12-23', Working_hours: '4' },
      { Working_date: '2021-12-24', Working_hours: '2' }
    ];
    
    // Agrupar por número de semana
    const groups = {};
    for (const item of data) {
      const date = moment(item.Working_date);
      const week = date.isoWeek();
      if (!groups[week]) groups[week] = [];
      groups[week].push({
        date: date.format('YYYY-MM-DD'),
        hours: parseInt(item.Working_hours)
      });
    }
    
    // Calcular totales para cada semana
    const result = [];
    for (const week in groups) {
      const items = groups[week];
      const start = moment(items[0].date);
      const end = moment(items[items.length - 1].date);
      result.push({
        Working_Startdate: start.format('YYYY-MM-DD'),
        Working_Enddate: end.format('YYYY-MM-DD'),
        TotalWorking_hours: items.reduce((sum, item) => sum + item.hours, 0)
      });
    }
    
    console.log(result);
    

    Este código utiliza dos bucles. El primer bucle agrupa los elementos del arreglo por su número de semana y analiza las fechas usando moment.js. El segundo bucle calcula los totales para cada semana y formatea el resultado como un arreglo de objetos con las propiedades esperadas.

    Ten en cuenta que esta solución asume que las fechas en el arreglo de entrada están ordenadas en orden ascendente. Si este no es el caso, debes ordenar el arreglo antes de agrupar los elementos por semana.

Comments are closed.