@ByJumping

Как вывести дату в указанном формате с библиотекой moment js?

Нужно вывести дату в удобном формате. С бекенда прилетает дата, когда человек оставил комментарий. Нужно выводить в следующем формате -
1. Если входящее время > 6 месяцев от текущего: выводим 12.01.2020 - без часов, минут и секунд
2. Если входящее время > месяца и меньше 6 месяцев от текущего: выводим Н месяцев назад
3. Если входящее время > 24 часов и меньше месяца от текущего: выводим Н дней назад
4. Если входящее время < 24 часам от текущего: выводим Н часов назад
5. Если входящее время < 60 минут от текущего: выводим Н минут назад
6. Если входящее время < 60 секунд от текущего: выводим Н секунд назад

Сделал пока так:

export default class DateUtils {
  static getHumanDate(date) {
    try {
      const month = moment(date).format('MM'); // месяц входящей даты
      const currentMonth = moment().format('MM'); // текущий месяц
      const currentYear = moment().format('YYYY'); // текущий год

      if (
        currentYear - moment(date).format('YYYY') < 1 &&
        currentMonth - month < 6
      ) {
        return moment(date, 'YYYYMMDD').fromNow();
      }

      return moment(date).format('DD.MM.YYYY');
    } catch (e) {
      console.log(e); // todo: notify?
    }

    return null;
  }
}

Для тестов в компоненте передаю дату:

calculateDate(date) {
      console.log(DateUtils.getHumanDate('2022-02-01'));
    },

Сейчас корректно отображается только Если входящее время > 6 месяцев от текущего и Если входящее время > 24 часов и меньше месяца. Как дописать остальные условия не понимаю.
  • Вопрос задан
  • 194 просмотра
Решения вопроса 1
YavaDev
@YavaDev
Ну для начала перед тем как использовать какой либо инструмент, советую почитать его документацию. Ведь именно в документации и описано как работает данный интрумент.

А теперь как сделать.
В moment.js есть такие методы как .add() и .subtract(), которые позволяют добавлять и отнимать время.
А еще есть методы .isBefore(), .isAfter(), .isBetween(), которые сравнивают даты.

Зная эти методы, можно приступить к реализации
const currentDate = moment(); // текущая дата
// далее к дате комментария добавляем 6 месяцев и сравниваем с текущей датой
const isAfterSixMonth = moment(date).add(6, 'months').isAfter(currentDate);
if(isAfterSixMonth) { // если дата комеентария + 6 месяцев > текущая дата
  // выводим нужный формат
}

Это первый пункт, остальные делаются по аналогии.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы