darsga qaytish

Nisbiy sanani formatlash

formatDate(sana) funktsiyasini yozing, u sana ni quyidagicha formatlashi kerak:

  • Agar sana 1 soniyadan kam vaqt o’tgan bo’lsa, "hozir".
  • Aks holda, agar sana 1 daqiqadan kam vaqt o’tgan bo’lsa, unda "n soniya oldin".
  • Aks holda, agar bir soatdan kam bo’lsa, unda "m min oldin".
  • Aks holda, "DD.MM.YY HH:mm" formatidagi to’liq sana. Ya’ni: "kun.oy.yil soat:daqiqa", barchasi 2 xonali formatda, masalan, 31.12.16 10:00.

Misol uchun:

alert(formatDate(new Date(new Date() - 1))); // "hozir"

alert(formatDate(new Date(new Date() - 30 * 1000))); // "30 soniya oldin"

alert(formatDate(new Date(new Date() - 5 * 60 * 1000))); // "5 daqiqa oldin"

// 31.12.2016, 20:00 kabi kechagi sana
alert(formatDate(new Date(new Date() - 86400 * 1000)));

Sinovlar bilan sandbox-ni oching.

Sana dan hozirgi kungacha bo’lgan vaqtni olish uchun – sanalarni qisqartiraylik.

function formatDate(date) {
  let diff = new Date() - date; // millisekundlardagi farq

  if (diff < 1000) {
    // 1 soniyadan kam
    return "right now";
  }

  let sec = Math.floor(diff / 1000); // farqni soniyalarga aylantirish

  if (sec < 60) {
    return sec + " sec. ago";
  }

  let min = Math.floor(diff / 60000); // farqni daqiqaga aylantirish
  if (min < 60) {
    return min + " min. ago";
  }

  // sanani formatlash
  // bir joylik kun/oy/soat/daqiqaga yetakchi nollarni qo'shish
  let d = date;
  d = [
    "0" + d.getDate(),
    "0" + (d.getMonth() + 1),
    "" + d.getFullYear(),
    "0" + d.getHours(),
    "0" + d.getMinutes(),
  ].map((component) => component.slice(-2)); // har bir komponentning oxirgi 2 ta raqamini oling

  // tarkibiy qismlarni sanaga qo'shiling
  return d.slice(0, 3).join(".") + " " + d.slice(3).join(":");
}

alert(formatDate(new Date(new Date() - 1))); // "hozir"

alert(formatDate(new Date(new Date() - 30 * 1000))); // "30 soniya oldin"

alert(formatDate(new Date(new Date() - 5 * 60 * 1000))); // "5 daqiqa oldin"

// kechagi sana kabi 31.12.2016, 20:00
alert(formatDate(new Date(new Date() - 86400 * 1000)));

Muqobil yechim:

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;

  // formatlash
  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}`;
  }
}

Yechimni sandbox-dagi sinovlar bilan oching.