darsga qaytish

Ko'p kunlar oldin oyning qaysi kuni bo'lgan?

getDateAgo(sana, kunlar) funktsiyasini yarating, oy kunini sanadan bir necha ku oldingi sanani qaytaring.

Masalan, agar bugun 20 bo’lsa, getDateAgo(new Date(), 1) 19, getDateAgo(new Date(), 2) esa 18-bo’lishi kerak.

Bundan tashqari, bir necha oy/yil davomida ishonchli ishlashi kerak

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. Funksiya berilgan sana ni o’zgartirmasligi kerak.

Sinovlar bilan sandbox-ni oching.

Fikr oddiy: date dan boshlab berilgan kunlar sonini qisqartirish:

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

…Ammo funktsiya date ni o’zgartirmasligi kerak. Bu muhim narsa, chunki bizga sana beradigan tashqi kod uning o’zgarishini kutmaydi.

Uni amalga oshirish uchun sana quyidagi kabi klonlansin:

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)

Yechimni sandbox-dagi sinovlar bilan oching.