zpět k lekci

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.

Otevřít pískoviště s testy.

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)

Otevřít řešení s testy na pískovišti.