Ошибка расчета JavascriptJavascript

Форум по Javascript
Ответить
Anonymous
 Ошибка расчета Javascript

Сообщение Anonymous »

У меня проблема с этим скриптом, который рассчитывает 2 праздника вместо 1, если вы выполняете смену, например N1 или N2, начиная с вечера субботы или перед праздником, код работает по ссылке: https://creacomunicazioni.it/VP.html, может кто-нибудь мне помочь?
// Poiché nel ciclo sopra potremmo aver incrementato numFestiviLavorati due volte per lo stesso giorno (es. notte e giorno stesso),
// è più corretto ricostruire il conteggio dei festivi lavorati in modo univoco:
// - scansioniamo le righe e se il giorno è festivo e ha almeno una selezione con ore => lo contiamo una sola volta
// - inoltre aggiungiamo le notti che soddisfano la regola "giorno precedente ad un festivo o il sabato" (se non già contate)
// Implementiamo quindi una ricostruzione precisa qui:

// Reset e ricostruzione
numFestiviLavorati = 0;
const giorniContati = new Set();

Array.from(el.tbody.children).forEach(tr=>{
const giorno=parseInt(tr.children[0].textContent,10);
const dt=new Date(anno,mese,giorno);
const dtTime = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate()).getTime();
const isDom = dt.getDay()===0;
const isFest = isDom || festivitaItaliane(anno).some(d=>new Date(d.getFullYear(),d.getMonth(),d.getDate()).getTime() === dtTime);
const selM = tr.children[1].querySelector('select');
const selP = tr.children[2].querySelector('select');
const selN = tr.children[3].querySelector('select');
const hasOreSelection = ((selM && selM.value && turniData[selM.value]) || (selP && selP.value && turniData[selP.value]) || (selN && selN.value && turniData[selN.value]));
if(isFest && hasOreSelection) {
giorniContati.add(dtTime); // contiamo quel festivo lavorato
}
});

// aggiungiamo notti N1/N2 che sono giorno precedente a festivo o sono il sabato:
Array.from(el.tbody.children).forEach(tr=>{
const giorno=parseInt(tr.children[0].textContent,10);
const dt=new Date(anno,mese,giorno);
const selN = tr.children[3].querySelector('select');
if(selN && (selN.value==='N1' || selN.value==='N2')) {
const nextDay = new Date(anno, mese, giorno+1);
const nextTime = new Date(nextDay.getFullYear(), nextDay.getMonth(), nextDay.getDate()).getTime();
const nextIsFest = (nextDay.getDay()===0) || (festivitaItaliane(anno).some(d=>new Date(d.getFullYear(),d.getMonth(),d.getDate()).getTime() === nextTime));
const isSaturday = dt.getDay() === 6;
// se la "festività" individuata non è già conteggiata come giorno festivo lavorato -> la aggiungiamo
if(nextIsFest) {
// se nextDay è festivo e non è già stato contato come festivo lavorato (giorno successivo)
if(!giorniContati.has(nextTime)) {
giorniContati.add(nextTime);
}
}
if(isSaturday) {
const currTime = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate()).getTime();
if(!giorniContati.has(currTime)) {
giorniContati.add(currTime);
}
}
}
});

numFestiviLavorati = giorniContati.size;

// assegna ai DOM
el.totaleOre.textContent = mmToHHMM(totMin);
el.numNotti.textContent = String(numNotti);
el.numFestivi.textContent = String(numFestiviLavorati);
el.numFerie.textContent = String(numFerie);
el.numMalInf.textContent = String(numMalInf);
}



Подробнее здесь: https://stackoverflow.com/questions/797 ... re-calcolo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»