У меня проблема с этим скриптом, который рассчитывает 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
Ошибка расчета Javascript ⇐ Javascript
Форум по Javascript
1761390756
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);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79799465/javascript-errore-calcolo[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия