Как рассчитать относительную дату с этого момента всего за несколько дней, используя momentjs?

#javascript #jquery #momentjs

#javascript #jquery #momentjs

Вопрос:

Я пытаюсь получить количество дней относительно текущего времени, возвращая только дни в единицах измерения. Итак, если что-то произошло неделю назад, это будет означать 7 дней. Если бы это произошло 2 месяца назад, это также вернуло бы это время в днях.

Я знаю, как этого добиться, но у меня возникают проблемы с соединением частей вместе.

У меня есть мои дни в качестве атрибута данных «data-order», поэтому data-order =»2019-4-2 00:00″ или «2019-4-2», если это упрощает вычисления.

 $(".pop-cal").each(function (i, obj) {
    moment.relativeTimeThreshold("m", 1);
    moment.relativeTimeThreshold("d", 25 * 100);

    var date = $(this).attr("data-order");
    var momentDate = moment(date).fromNow();

    $(this).attr("data-content", momentDate);
});
  

Это позволяет мне получать даты, но они всегда отключены.

Мои ожидаемые результаты были бы подтверждением, аналогичным использованию поиска Google и сообщению «58 дней назад» и получению вторника 12 февраля 2019 года.

В настоящее время я получаю в качестве результата «59 дней назад» на момент времени, созданный в «2019-2-12.

Ответ №1:

fromNow Метод не подходит, если вам нужно точное количество дней, потому что он работает путем преобразования времени в длительность (измеряемую в месяцах и миллисекундах), а затем преобразования продолжительности в удобочитаемую форму (метод humanize).

Как указано в документах Duration:

Гораздо лучше использовать moment#diff для вычисления дней или лет между двумя моментами, чем использовать длительности.

Вы можете увидеть проблему, если вы выполняете fromNow 28 февраля и 1 марта с интервалом в 1 день, но с интервалом в fromNow 4 дня (из-за 28 дней в феврале вместо 31 дня).

 moment("2019-03-01").fromNow() // "45 days ago"
moment("2019-02-28").fromNow() // "49 days ago"
  

Метод moment #diff может дать вам точную разницу между двумя моментами в днях, например, между моментами a и b :

 a.diff(b, 'days') 
  

Комментарии:

1. Я попробую сделать это таким образом, также обрабатывая относительные даты «x дней назад», «завтра», «вчера», «через x дней».

2. Это имеет смысл. Я только что добавил немного информации, почему fromNow работает плохо