Autor Zpráva
igid26
Profil
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
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
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
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
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
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
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
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>');
           }

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0