Autor | Zpráva | ||
---|---|---|---|
igid26 Profil |
#1 · Zasláno: 4. 10. 2021, 18:45:58
Zdravím,
potreboval by som poradiť s jedným riešením. Snažím sa o vytvorenie kalkulačky na výpočet poplatku úroku cez jQuery. Formulár obsahuje dva inputy na výber dátumov (dátum od a dátum do). Na základe toho aké dátumy budú vybrané sa vypočíta počet celkový počet dní a to sa vynásobí hodnotou z inputu (suma) a úrokom. Vzorec bude teda nasledovný: suma * urok * celkový počet dní = výsledok To všetko by bolo v poriadku. Túto kalkulačku som si vytvoril. jsfiddle.net/0kbg7pxw/1 Ja by som však potreboval podmieniť výšku úroku výberom dátumu. Teda napríklad. Ak je datumOD > 1.1.2019 a datumDO < 1.7.2019 bude úrok 0,05. Ak je datumOD > 1.1.2020 a datumDO < 1.7.2020 bude úrok 0,15. V prípade, že výber dátumov presiahne cez obidve alebo viacej podmienok, tak potrebujem, aby sa mi dni v konkrétnej podmienke spočítali dni a teda aj uplatnil vzorec. Výsledok by teda vyzeral napríklad nasledovne: Užívateľ zadá sumu: 500 € Užívateľ si vyberie dátumy: od 25.12.2019 do 5.1.2020 Máte vybraných 7 dni v rozpätí dátumov 1.1.2019 – 31.12.2019 = 175 € (vzorec: 7 * 0.05 * 500) Máte vybraných 5 dní v rozpätí dátumov 1.1.2020 – 31.12.2020 = 375 € (vzorec: 7 * 0.15 * 500) Spolu = 550 € Teda potreboval by som, aby mi to rozčlenilo dátumy aj podľa tých podmienok a následne sa spočítali sumy. Viete ma niekto nasmerovať alebo poradiť ako to vyriešiť. Lámem si s tým hlavu už niekoľko dní a neviem sa pohnúť. Vopred ďakujem za akúkoľvek odpoveď. |
||
Kajman Profil |
Zkuste pro všechna rozmezí (hranice) přičíst něco jako
Math.max(1+Math.round((Math.min(datumDO,hraniceDO)-Math.max(datumOD,hraniceOD))/(1000*60*60*24)),0)*hraniceUrok*castka |
||
igid26 Profil |
#3 · Zasláno: 5. 10. 2021, 08:18:34
Dobrý deň, Kajman:
ďakujem moc za odpoveď. Skúšal som to zakomponovať do môjho kódu, ale výsledok mi hádže 0. if(datumOD > new Date("01/01/2019")) { hraniceOD = new Date("01/01/2019"); hraniceDO = new Date("10/10/2021"); finalSuma = Math.max(1+Math.round((Math.min(datumDO,hraniceDO)-Math.max(datumOD,hraniceOD))/(1000*60*60*24)),0) * 0.05 * suma; alert(finalSuma); } |
||
Kajman Profil |
#4 · Zasláno: 5. 10. 2021, 09:15:50
A v datumDO a datumOD máte správné datumy a v suma částku? Přijde mi, že by to mělo fungovat.
Možná bude lépe sčítat i dny se speciálním úrokem a pro zbytek dnů použít nějaký výchozí úrok, něco jako jsfiddle.net/a207gbte |
||
igid26 Profil |
#5 · Zasláno: 5. 10. 2021, 14:20:46
Dobrý deň, Kajman:,
super funguje skvele, takto presne som to potreboval. Ak je to možné vedeli by ste mi ešte prosím poradiť ako vypísať celkový počet dní pre jednotlivé hranice aj so sumami a úrokom, ktorý sa uplatnil na dané dni? Napríklad: Máte vybraných 7 dni v rozpätí dátumov 1.1.2019 – 31.12.2019 = 175 € (úrok 0.05) Máte vybraných 5 dní v rozpätí dátumov 1.1.2020 – 31.12.2020 = 375 € (úrok 0.15) Suma spolu: 550 € |
||
Kajman Profil |
#6 · Zasláno: 5. 10. 2021, 14:30:50
Pokud je v tom forEach vypočtená proměnná dnu větší než 0, tak si to někam poznačíte. To už zvládnete sám.
|
||
igid26 Profil |
#7 · Zasláno: 5. 10. 2021, 16:41:16
Kajman:
super, funguje. Ďakujem moc za ochotu naozaj ste mi veľmi pomohli. Spravil som to takto. Možno niekomu pomôže. $('.riadok-urok').remove(); uroky.forEach(hranice=>{ var dnu=Math.max(1+Math.round((Math.min(end,hranice[1])-Math.max(start,hranice[0]))/(1000*60*60*24)),0); dnuZapocitano+=dnu; vypocet+=dnu*hranice[2]*suma; if(dnuZapocitano > 0) { var den = hranice[2]; $('#finalne-vypocty').append('<div class = riadok-urok >'+ dnu +' '+ den + '' + vypocet +'</div>'); } }); |
||
Kajman Profil |
#8 · Zasláno: 5. 10. 2021, 16:59:00
Pozor, v dnuZapocitano a vypocet jsou přece průběžné součty. To by mělo psát při více řádcích nesmysly.
|
||
igid26 Profil |
#9 · Zasláno: 5. 10. 2021, 17:40:04
Kajman:
áno, máte pravdu. Už som si to opravil. Ešte raz ďakujem. if(dnuZapocitano > 0) { vypocetNovy = dnu*hranice[2]*suma; dnuZapocitanoNovy = dnu; var den = hranice[2]; var datumikOD = hranice[0]; year = datumikOD.getFullYear(); month = datumikOD.getMonth()+1; dt = datumikOD.getDate(); var datumikDO = new Date(hranice[1]); $('#moja-tabulka').append('<tr class = riadok-urok><td>' +dt+'.'+month+'.'+year+'</td> <td>'+ dnuZapocitanoNovy +'</td> <td>'+ den + '</td> <td>' + vypocetNovy +'</td></tr>'); } |
||
Časová prodleva: 3 roky
|
0