Který den v měsíci byl před mnoha dny?
důležitost: 4
Vytvořte funkci vraťDenPřed(datum, dny), která vrátí den v měsíci, který byl dny dnů přede dnem datum.
Například jestliže dnes je 20., pak vraťDenPřed(new Date(), 1) by měla vrátit 19 a vraťDenPřed(new Date(), 2) by měla vrátit 18.
Měla by spolehlivě fungovat i pro dny=365 nebo více:
let datum = new Date(2015, 0, 2);
alert( vraťDenPřed(datum, 1) ); // 1, (1. leden 2015)
alert( vraťDenPřed(datum, 2) ); // 31, (31. prosinec 2014)
alert( vraťDenPřed(datum, 365) ); // 2, (2. leden 2014)
P.S. Funkce by neměla modifikovat zadané datum.
Myšlenka je jednoduchá: odečíst zadaný počet dní od datum:
function vraťDenPřed(datum, dny) {
datum.setDate(datum.getDate() - dny);
return datum.getDate();
}
…Funkce by však neměla měnit datum. To je důležité, jelikož vnější kód, který nám datum předává, neočekává, že bude změněno.
Abychom to implementovali, naklonujeme datum, např. takto:
function vraťDenPřed(datum, dny) {
let kopieData = new Date(datum);
kopieData.setDate(datum.getDate() - dny);
return kopieData.getDate();
}
let datum = new Date(2015, 0, 2);
alert( vraťDenPřed(datum, 1) ); // 1, (1. leden 2015)
alert( vraťDenPřed(datum, 2) ); // 31, (31. prosinec 2014)
alert( vraťDenPřed(datum, 365) ); // 2, (2. leden 2014)