retour au cours

Quel jour du mois était il y a plusieurs jours ?

importance: 4

Créez une fonction getDateAgo(date, days) pour renvoyer le days précédent la date date.

Par exemple, si aujourd’hui on est le 20, alors getDateAgo(new Date(), 1) doit être le 19 et getDateAgo(new Date(), 2) doit être le 18.

elle doit fonctionner de manière fiable sur plus de 365 jours.

let date = new Date(2015, 0, 2);

alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015)
alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014)
alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)

P.S. La fonction ne doit pas modifier la date donnée.

Open a sandbox with tests.

L’idée est simple: soustraire un nombre donné de jours à partir de la date:

function getDateAgo(date, days) {
  date.setDate(date.getDate() - days);
  return date.getDate();
}

…Mais la fonction ne doit pas changer la date. C’est une chose importante, car le code externe qui nous donne la date ne s’attend pas à ce qu’il change.

Pour le mettre en oeuvre, clonons la date, comme ceci:

function getDateAgo(date, days) {
  let dateCopy = new Date(date);

  dateCopy.setDate(date.getDate() - days);
  return dateCopy.getDate();
}

let date = new Date(2015, 0, 2);

alert( getDateAgo(date, 1) ); // 1, (1 Jan 2015)
alert( getDateAgo(date, 2) ); // 31, (31 Dec 2014)
alert( getDateAgo(date, 365) ); // 2, (2 Jan 2014)

Ouvrez la solution avec des tests dans une sandbox.