У меня есть массив дней. Каждый день - это объект с открытым/закрытым временем. 0 -1440 минут. например:Выполнение определенных расчетов по рабочим дням, чтобы вернуть две даты с моментом
const array = [
{
hours: {
open: 1260, // 21:00 <- same day
close: 510 // 08:30 <- next day
}
},
{
hours: {
open: 1260, // 21:00 <- same day
close: 510 // 08:30 <- next day
}
},
{
hours: {
open: 510, // 08:30 <- same day
close: 1260 // 21:00 <- same day
}
}
];
Результат будет выглядеть следующим образом:
// if current time is: "2017-01-10T14:53:45Z" for example
{
open: "2017-01-10T08:30:00Z",
close: "2017-01-11T21:00:00Z"
}
Таким образом, механизм должен перебирает массив, найти мин открытой, и максимальные близко и понять, какая из них за полночью, чтобы добавить/вычтите 1 день, чтобы получить пример, о котором я упомянул. То, что я сделал до сих пор:
const array = [
{
hours: {
open: 1260, // 21:00 <- same day
close: 510 // 08:30 <- next day
}
},
{
hours: {
open: 1260, // 21:00 <- same day
close: 510 // 08:30 <- next day
}
},
{
hours: {
open: 510, // 08:30 <- same day
close: 1260 // 21:00 <- same day
}
}
];
let range = {};
let temp_from = [];
let temp_to = [];
array.forEach((a) => {
const { hours } = a;
const open = moment.utc(hours.open * 60000).format('HH:mm'); // ex 21:00
const close = moment.utc(hours.close * 60000).format('HH:mm'); // ex 21:00
const todayUTC = moment.utc();
const hourUTC = todayUTC.format('H');
const minutesUTC = todayUTC.format('mm');
const secondsUTC = todayUTC.format('ss');
const CURRENT_TIME = (hourUTC * 60) + (minutesUTC * 1) + (secondsUTC/60); // exact time 0 - 1440
console.log('open', open.split(':')[0]);
temp_from.push(
moment.utc().set({
hour: open.split(':')[0],
minute: open.split(':')[1],
second: 0,
}).format()
)
temp_to.push(
moment.utc().set({
hour: close.split(':')[0],
minute: close.split(':')[1],
second: 0,
}).add(hours.open > hours.close ? 1 : 0, 'days').format()
)
})
console.log(temp_from, temp_to);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
Я не уверен, о подходе, и если механизм может быть нарушен?
Этот вопрос отчасти сбивает с толку. У вас есть три дня, но вы хотите получить единственный результат с открытой датой/временем и близкой датой/временем, но эти даты должны быть только на один день? Почему первая и последняя даты не были бы на три дня друг от друга? –