JSFiddle - React, Tailwind, and code Playground

by Josh Pullen

HTML

<div id="output"></div>
<button id="pay">Pay $100</button>

JavaScript

function continuousInterest(startAmount, rate, time) {
	return startAmount * Math.E ** (rate * time);
}

let startTime = new Date();
let startAmount = 10000;
const rate = 4.00 / 100;

function getDueNow() {
	const realTime = (new Date() - startTime) / 1000 / 60 / 60 / 24 / 365.25;
  const fastTime = realTime * (365.25 * 24 * 60); // 1 year => 1 minute
  
  return continuousInterest(startAmount, rate, fastTime);
}

document.getElementById("pay").addEventListener("click", () => {
	const dueBefore = getDueNow();
  
  startTime = new Date();
  startAmount = dueBefore - 100;
});

function render() {
	const output = document.getElementById("output");
  const due = getDueNow();
  output.innerText = `Amount due: $${Math.round(due * 100) / 100}`;
  
  requestAnimationFrame(render);
}

render();