Предложение относится к профессионалу и специальности. Предложение имеет дату начала и окончания. Идея состоит в том, чтобы получить все даты путем добавления интервала до достижения конечной даты.
Я пытался получить такой результат:
[
{
professional: 5e5e6232b06022066ced2cdd,
specialty: 5e5d69df3c7c3642b1704505,
offer: 5e5d69df3c7c3642b1704505,
date: '6/31/2020',
hours: ['11:30', '11:50']
},
{
professional: 5e5e6232b06022066ced2cdd,
specialty: 5e5d69df3c7c3642b1704505,
offer: 5e5d69df3c7c3642b1704505,
date: '7/31/2020',
hours: ['11: 30', '11: 50']
]
},
{
professional: 5e5e6232b06022066ced2cdd,
specialty: 5e5d69df3c7c3642b1704505,
offer: 5e5d69df3c7c3642b1704505,
date: '8/31/2020',
hours: ['11: 30', '11: 50']
]
},
]
Предложения, сохраненные в базе данных выглядит как ниже.
Пока у меня есть это, но даты повторяются, я хочу сгруппировать по датам, т.е. 3/6/2020 с большим количеством часов.
const fetchedOffers = [{
_id: 'dsd87878',
professional: 'd2ycdd',
specialty: '704505',
name: 'Nueva',
begin: new Date('2020-03-31T21:36:04.169Z'),
end: new Date('2020-04-08T21:36:04.169Z'),
interval: 1200000,
createdAt: '2020-03-24T23:39:00.808Z',
updatedAt: '2020-03-24T23:39:00.808Z',
},
{
_id: 'ddd67878',
professional: '25c0a8',
specialty: '704505',
name: 'Nueva',
begin: new Date('2020-06-30T21:36:04.169Z'),
end: new Date('2020-07-08T21:36:04.169Z'),
interval: 1200000,
createdAt: '2020-03-24T23:39:00.808Z',
updatedAt: '2020-03-24T23:39:00.808Z',
}
];
const hours = fetchedOffers.reduce((prev, acc) => {
let currentDate = acc.begin.getTime()
const endDate = acc.end.getTime()
while (currentDate < endDate) {
const d = new Date(currentDate)
if (d.getHours() > 7 && d.getHours() < 20 && d.getDay() < 6 && d.getDay() > 0) {
prev.push({
date: new Date(d).toLocaleString('es-CL')
})
}
currentDate = currentDate + acc.interval
}
return prev
}, [])
console.log(hours)
Может кто-нибудь мне помочь?