تاریخ مربوط را تغییر شکل دهید
اهمیت: 4
تابع formatDate(date)
بنویسید که باید date
را به صورت زیر تغییر شکل دهد:
- اگر از
date
کمتر از 1 ثانیه گذشته باشد، سپس شکل جدید"right now"
(همین حالا) است. - در غیر این صورت اگر از
date
کمتر از 1 دقیقه گذشته باشد، سپس شکل چدید"n sec. ago"
(n ثانیه قبل) است. - در غیر این صورت اگر کمتر از یک ساعت باشد، سپس شکل جدید
"m min. ago"
(m دقیقه پیش) است. - در غیر این صورت، تاریخ کامل با به شکل
"DD.MM.YY HH:mm"
باشد. یعنی:"day.month.year hours:minutes"
، همه به شکل دو رقمی مانند10:00 31.12.16
.
برای مثال:
alert( formatDate(new Date(new Date - 1)) ); // "right now"
alert( formatDate(new Date(new Date - 30 * 1000)) ); // "30 sec. ago"
alert( formatDate(new Date(new Date - 5 * 60 * 1000)) ); // "5 min. ago"
// تاریخ دیروز مانند 20:00 31.12.16
alert( formatDate(new Date(new Date - 86400 * 1000)) );
برای گرفتن زمان از date
تا الان، بیایید تفاضل تاریخها را بیابیم.
function formatDate(date) {
let diff = new Date() - date; // تفاضل به میلیثانیه
if (diff < 1000) { // less than 1 second
return 'right now';
}
let sec = Math.floor(diff / 1000); // به ثانیه diff تبدیل
if (sec < 60) {
return sec + ' sec. ago';
}
let min = Math.floor(diff / 60000); // به دقیقه diff تبدیل
if (min < 60) {
return min + ' min. ago';
}
// تغییر دادن شکل تاریخ
// اضافه کردن صفر به دقیقه/ساعت/ماه/روز تک رقمی
let d = date;
d = [
'0' + d.getDate(),
'0' + (d.getMonth() + 1),
'' + d.getFullYear(),
'0' + d.getHours(),
'0' + d.getMinutes()
].map(component => component.slice(-2)); // دریافت 2 رقم آخر هر جزء
// متصل کردن اجزاء برای ایجاد تاریخ
return d.slice(0, 3).join('.') + ' ' + d.slice(3).join(':');
}
alert( formatDate(new Date(new Date - 1)) ); // "right now"
alert( formatDate(new Date(new Date - 30 * 1000)) ); // "30 sec. ago"
alert( formatDate(new Date(new Date - 5 * 60 * 1000)) ); // "5 min. ago"
// تاریخ دیروز مانند 20:00 31.12.2016
alert( formatDate(new Date(new Date - 86400 * 1000)) );
راه حل جایگزین:
function formatDate(date) {
let dayOfMonth = date.getDate();
let month = date.getMonth() + 1;
let year = date.getFullYear();
let hour = date.getHours();
let minutes = date.getMinutes();
let diffMs = new Date() - date;
let diffSec = Math.round(diffMs / 1000);
let diffMin = diffSec / 60;
let diffHour = diffMin / 60;
// تغییر دادن شکل
year = year.toString().slice(-2);
month = month < 10 ? '0' + month : month;
dayOfMonth = dayOfMonth < 10 ? '0' + dayOfMonth : dayOfMonth;
hour = hour < 10 ? '0' + hour : hour;
minutes = minutes < 10 ? '0' + minutes : minutes;
if (diffSec < 1) {
return 'right now';
} else if (diffMin < 1) {
return `${diffSec} sec. ago`
} else if (diffHour < 1) {
return `${diffMin} min. ago`
} else {
return `${dayOfMonth}.${month}.${year} ${hour}:${minutes}`
}
}