Получение определенного количества дней с Moment.js, Node npm и Handlbars - PullRequest
0 голосов
/ 18 ноября 2018

Я использую moment.js в узле Handlebars. Я нашел этого помощника: http://moment.handlebars.solidgoldpig.com/, и это было полезно, но я хотел бы иметь возможность рассчитать количество дней между настоящим моментом и конкретной датой в будущем и вернуть ответ в днях.

{{moment "12/10/2018" "from" dfrom}} возвращает «22 дня». {{moment "12/25/2018" "from" dfrom}} возвращает "через месяц". То, что я хочу, это "38 дней".

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

Чтобы завершить и дать подробное объяснение того, что сработало для меня, я добавляю к этому вопросу. Но, по сути, ответ Маркоса Касагранде должен быть принятым.

  1. Я установил моменты из командной строки npm install moment --save
  2. В server.js я добавил `var moment = require (" moment));
  3. Затем я скопировал ответ Маркоса Касагранде в server.js, но добавил немного точности в расчет. return Math.abs(moment().startOf('day').diff(moment(date).startOf('day'), 'days')+1);
  4. В моем руле я использовал {{days-diff "2018-12-25 00:00"}}
  5. Я не добавил moment.js в заголовок html-файла.

1 Ответ

0 голосов
/ 18 ноября 2018

Вы можете достичь желаемого с помощью нескольких строк кода:

Все, что вам нужно: dateA.diff(dateB, 'days'));

moment.suppressDeprecationWarnings = true;

Handlebars.registerHelper('days-diff', date => {
  return Math.abs(moment().diff(moment(date), 'days'));
});

const template = Handlebars.compile(`
  Until 12/10/2018: {{days-diff "12/10/2018"}}
  Until 12/25/2018: {{days-diff "12/25/2018"}}
  Until 12/25/2019: {{days-diff "12/25/2019"}}
`);

console.log(template());
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Handlebars</title>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.8/handlebars.js"></script>
<body>
</body>
</html>
...