چند روز قبل کدام روز ماه بود؟
اهمیت: 4
یک تابع 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
داده شده را تغییر دهد.
ایده سادهای است: تعداد روز داده شده را از 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)
function getDateAgo(date, days) {
let dateCopy = new Date(date);
dateCopy.setDate(date.getDate() - days);
return dateCopy.getDate();
}