@serdev5578

Как высчитывать и округлять прошедшие месяцы имея дату?

есть блоки которые выводятся в цикле и у которых есть дата активности например 121 день назад у конкретного итема. С бэкенда приходит дата этой последней активности которую я форматирую через JS в обычный формат "2022.04.13" , задача состоит в том нужно чтобы система высчитывала месяца и округляла в таком формате:
From 30 to 41d = 1m ago
From 41 to 51- 1.5m ago
From from 51 to 71 - 2m ago
ну и так далее +-10 дней для каждого месяца.

У меня написана функция но она всего лишь выводит сколько прошло месяцев без необходимых в условиях задачи диапазонов и плавающих чисел по типу 1.5 месяцев

const monthAgo = (endDate) => {
  const date = new Date();
  let monthInitial = date.getMonth();
  const monthCalc = monthInitial++;
  const month = monthCalc < 10 ? '0' + monthCalc : monthCalc;
  const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
  let startDate = date.getFullYear() + '-' + month + '-' + day;
  startDate = new Date(startDate);

  let dateEnd = endDate.slice(0, 10);
  dateEnd = new Date(dateEnd);

  let calcMonthAgo = Math.round((startDate.getTime()-dateEnd.getTime())/(1000 * 60 * 60 * 24*30) + 1);

  return calcMonthAgo;
}


Запутался как сделать мне чтоб работало как написано в требованиях?
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
@garbagecollected
Пример 1
let date = new Date();
date.setDate(date.getDate()-121); // установим дату в текущую минус 121 день
console.log(date);

Пример 2
let ts = Date.now();  // Количество мс, прошедших с 1 января 1970г.
ts-=121*24*3600*1000; // Вычтем 121 день помножим на 24 часа, помножим на 3600 сек/час, помножим на 1000 мс/сек
let date = new Date(ts); // Создадим новую дату
console.log(date);

Пример 3
let date = new Date('2022-04-13T14:43:00Z');
let months  = (Date.now() - date.getTime()) / (30*24*3600*1000);
console.log(`C момента 2022-04-13 прошло ${months.toFixed(1)} месяцев`);

Пример 4
let month;

month = 6.7343423;
month = Math.round(month * 2)/2;
console.log(month); // => 6.5

month = 6.8343423;
month = Math.round(month * 2)/2;
console.log(month); // => 7
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы