|
/* |
|
02/04/2018 -> manhã |
|
03/04/2018 -> manhã -> terça |
|
|
|
04/04/2018 -> tarde |
|
05/04/2018 -> tarde |
|
|
|
06/04/2018 -> noite |
|
07/04/2018 -> noite |
|
|
|
08/04/2018 -> folga |
|
09/04/2018 -> folga |
|
|
|
10/04/2018 -> manhã -> terça |
|
11/04/2018 -> manhã |
|
|
|
12/04/2018 -> tarde |
|
13/04/2018 -> tarde |
|
|
|
14/04/2018 -> noite |
|
15/04/2018 -> noite |
|
|
|
16/04/2018 -> folga |
|
17/04/2018 -> folga -> terça |
|
|
|
18/04/2018 -> manhã |
|
19/04/2018 -> manhã |
|
|
|
20/04/2018 -> tarde |
|
21/04/2018 -> tarde |
|
|
|
22/04/2018 -> noite |
|
23/04/2018 -> noite |
|
|
|
24/04/2018 -> folga -> terça |
|
25/04/2018 -> folga |
|
|
|
26/04/2018 -> manhã |
|
27/04/2018 -> manhã |
|
|
|
28/04/2018 -> tarde |
|
29/04/2018 -> tarde |
|
|
|
30/04/2018 -> noite |
|
01/05/2018 -> noite -> terça |
|
|
|
02/05/2018 -> folga |
|
03/05/2018 -> folga |
|
*/ |
|
const turnos = { |
|
manha: 0, |
|
tarde: 1, |
|
noite: 2, |
|
folga: 3, |
|
}; |
|
|
|
const diaTrabalho = [ |
|
turnos.manha, |
|
turnos.tarde, |
|
turnos.noite, |
|
turnos.folga, |
|
]; |
|
|
|
const ehTerca = function (data) { |
|
return data.getDay() === 2; |
|
}; |
|
|
|
const proximoDia = function (date) { |
|
var dat = new Date(date.valueOf()); |
|
dat.setDate(dat.getDate() + 1); |
|
return dat; |
|
}; |
|
|
|
const encontrarTercasFeira = function (primeiroDia, quantidadeDeTercas) { |
|
const dataDoPrimeiroDia = primeiroDia.data; |
|
const turnoDoPrimeiroDia = primeiroDia.turno; |
|
const indiceDoPrimeiroDia = diaTrabalho.indexOf(turnoDoPrimeiroDia); |
|
const tercasEncontradas = []; |
|
|
|
let diaAuxiliar = dataDoPrimeiroDia; |
|
let indiceDoDiaAuxiliar = indiceDoPrimeiroDia; |
|
|
|
while (tercasEncontradas.length < quantidadeDeTercas) { |
|
for (let diaIndice = 0; diaIndice < 2; diaIndice = diaIndice + 1) { |
|
if (ehTerca(diaAuxiliar)) { |
|
const naoParticipa = (diaTrabalho[indiceDoDiaAuxiliar] === turnos.noite) |
|
tercasEncontradas.push({ |
|
participaDaSessao: !naoParticipa, |
|
tercaFeira: diaAuxiliar, |
|
}); |
|
} |
|
|
|
diaAuxiliar = proximoDia(diaAuxiliar); |
|
} |
|
|
|
indiceDoDiaAuxiliar = indiceDoDiaAuxiliar + 1; |
|
|
|
if (indiceDoDiaAuxiliar >= diaTrabalho.length) { |
|
indiceDoDiaAuxiliar = 0; |
|
} |
|
} |
|
|
|
return tercasEncontradas; |
|
}; |
|
|
|
const tercas = encontrarTercasFeira({ |
|
data: new Date(2018, 3, 2), |
|
turno: turnos.manha, |
|
}, 15); |
|
|
|
const meses = [ |
|
'Janeiro', |
|
'Fevereiro', |
|
'Março', |
|
'Abril', |
|
'Maio', |
|
'Junho', |
|
'Julho', |
|
'Agosto', |
|
'Setembro', |
|
'Outrubro', |
|
'Novembro', |
|
'Dezembro', |
|
]; |
|
|
|
const agrupaPorMes = function (tercas) { |
|
/* |
|
3, 10 e 17 de abril, 1, 8 e 15 de maio ele participará |
|
const obj = { |
|
'Abril': [3, 10, 17], |
|
'Maio': [1, 8, 15], |
|
}; |
|
|
|
obj['sdfasdfasdf'] -> undefined |
|
obj['Abril'] -> [3, 10, 17] |
|
*/ |
|
const grupo = {}; |
|
|
|
tercas.forEach(function (terca) { |
|
const mes = meses[terca.tercaFeira.getMonth()] |
|
if (grupo[mes]) { |
|
grupo[mes].push(terca.tercaFeira.getDate()); |
|
} else { |
|
grupo[mes] = [terca.tercaFeira.getDate()]; |
|
} |
|
}); |
|
|
|
return grupo; |
|
}; |
|
|
|
const tercasQueParticipara = tercas.filter(function (terca) { |
|
return terca.participaDaSessao; |
|
}); |
|
|
|
const participaraAgrupado = agrupaPorMes(tercasQueParticipara); |
|
|
|
// [['Abril', [3, 10, 17]], ['Maio', [1, 8, 15]] |
|
// Janio participará nos dias 3, 10, 17 de Abril, 1, 8, 15 de Maio |
|
const diasEMessesParticipara = Object.entries(participaraAgrupado).map(function(itemDoGrupo){ |
|
// ['Abril', [3, 10, 17]] |
|
const dias = itemDoGrupo[1]; |
|
const mes = itemDoGrupo[0]; |
|
|
|
return `${dias.join(', ')} de ${mes}`; |
|
}).join(', '); // 3, 10, 17 de Abril, 1, 8, 15 de Maio |
|
|
|
console.log(`Janio participará nos dias ${diasEMessesParticipara}`); |
|
|
|
const tercasQueNaoParticipara = tercas.filter(function (terca) { |
|
return !terca.participaDaSessao; |
|
}); |
|
const naoParticiparaAgrupado = agrupaPorMes(tercasQueNaoParticipara); |
|
|
|
// [['Abril', [3, 10, 17]], ['Maio', [1, 8, 15]] |
|
// Janio não participará nos dias 3, 10, 17 de Abril, 1, 8, 15 de Maio |
|
const diasEMessesNaoParticipara = Object.entries(naoParticiparaAgrupado).map(function(itemDoGrupo){ |
|
// ['Abril', [3, 10, 17]] |
|
const dias = itemDoGrupo[1]; |
|
const mes = itemDoGrupo[0]; |
|
|
|
return `${dias.join(', ')} de ${mes}`; |
|
}).join(', '); // 3, 10, 17 de Abril, 1, 8, 15 de Maio |
|
|
|
console.log(`Janio não participará nos dias ${diasEMessesNaoParticipara}`); |