الرجوع الي الدرس

أي يومٍ من الشهر كان قبل عدة أيام؟

قم بإنشاء دالة getDateAgo(date, days) تقوم بإرجاع يوم الشهر days المنصرم من التاريخ date.

على سبيل المثال، إذا كان اليوم الحالي هو 20، فيجب أن يرد الاستدعاء getDateAgo(new Date(), 1) القيمة 19 ويرد الاستدعاء getDateAgo(new Date(), 2) القيمة 18.

يجب أن يعمل التابع بشكل فعال في حال كانت القيمة days=365 أو أكثر:

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)

ملاحظة: يجب أن لا يقوم التابع بتعديل قيمة الغرض date الممرر.

افتح sandbox بالإختبارات.

الفكرة بسيطة: نقوم بطرح عدد معين من الأيام من التاريخ date:

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

…ولكن يجب أن لا يغير التابع قيمة غرض التاريخ الممرر date. وهذه ملاحظة مهمة، لأن الكود الخارجي الذي يقوم بتمرير قيمة الغرض لا يتوقع أن يقوم التابع الخاص بنا بتعديل هذه القيمة.

لتنفيذ الطلب السابق، دعنا نقم باستنساخ التاريخ، كالتالي:

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)

افتح الحل الإختبارات في sandbox.