Сумма часовых вложений

#javascript #node.js #nodes #nestjs

Вопрос:

В приведенном ниже коде javascript в функции выполните выборку в БД (используя типером), из которой массив отформатирован следующим образом:

Пример данных JSON:

 {
        "id": 1,
        "nome": "prova2",
        "datacreazione": "2021-09-05T08:41:29.000Z",
        "costo": 23,
        "ore": "08:00",
        "IdPreventivo": 1,
        "IdUtente": 2
    },
    {
        "id": 2,
        "nome": "prova2",
        "datacreazione": "2021-09-06T08:38:26.000Z",
        "costo": 23,
        "ore": "08:00",
        "IdPreventivo": 1,
        "IdUtente": 2
    }
 

поле часы ( ore ) содержит общее количество часов выполненной работы, что я хочу сделать, это рассчитать общее количество часов, добавив и вычислив сумму всех ore введенных в это поле для каждого элемента массива часов, которые они имеют формат ЧЧ: ММ, как я могу это сделать?

AttivitaprevService.js

 @Injectable()
export class AttivitaprevService {
  constructor(
    @InjectRepository(Attivitaprev) private repo: Repository<Attivitaprev>
  ) {}

  create(dto: CreateAttivitaprevDto) {
    return this.repo.save(dto);
  }

  findAll() {
    return `This action returns all attivitaprev`;
  }

  async findOne(id: number) {
    return await this.repo.find({
      where: { IdPreventivo: id },
    });
  }

  sumofhour = (time1, time2) => {
    let [h1, m1] = time1.split(':')
    let [h2, m2] = time2.split(':')
  
    return (( h1   ( m1 / 60))   ( h2   ( m2 / 60)))
  }

  async totaleore(id: number) {
    var values= await this.repo.find({
      where: { IdPreventivo: id },
    });

    return values;
  }

..
 

Комментарии:

1. что такое экзегундо?

Ответ №1:

Пожалуйста, ознакомьтесь с Array.reduce реализацией.

 const data = [
  {
    "id": 1,
    "nome": "prova2",
    "datacreazione": "2021-09-05T08:41:29.000Z",
    "costo": 23,
    "ore": "08:30",
    "IdPreventivo": 1,
    "IdUtente": 2
  },
  {
    "id": 2,
    "nome": "prova2",
    "datacreazione": "2021-09-06T08:38:26.000Z",
    "costo": 23,
    "ore": "08:30",
    "IdPreventivo": 1,
    "IdUtente": 2
  }
]
sumofhour = () => {
  const sum = data.reduce((acc, curr) => {
    let [h1, m1] = curr.ore.split(':');
    acc  = ( h1   ( m1 / 60));
    return acc;
  }, 0)
  return sum;
};
console.log(sumofhour()); 

Ответ №2:

Сначала вы можете преобразовать часы в минуты, а затем рассчитать общее количество часов следующим образом:

 const data = [
  {
    "id": 1,
    "nome": "prova2",
    "datacreazione": "2021-09-05T08:41:29.000Z",
    "costo": 23,
    "ore": "08:30",
    "IdPreventivo": 1,
    "IdUtente": 2
  },
  {
    "id": 2,
    "nome": "prova2",
    "datacreazione": "2021-09-06T08:38:26.000Z",
    "costo": 23,
    "ore": "08:30",
    "IdPreventivo": 1,
    "IdUtente": 2
  }
]

function getTotalMinutes() {
   return data.reduce((acc, curr) => {
        const [hour, minutes ] = curr.ore.split(":");
        acc  = (( hour * 60)  ( minutes)); 
        return acc;
     },0) 
   
}

console.log((getTotalMinutes()/60).toFixed(2));