Чтобы правильно вычислить разницу между датами с использованием библиотеки moment.js и получить результат в формате "дни часы:минуты:секунды", вам нужно учитывать несколько моментов:
1. В вашем коде вы используете `moment()`, который создает объект текущей даты и времени на основании локального часового пояса. Таким образом, разница может включать полный день, если вы сравниваете два момента времени с разными часовыми зонами.
2. Вместо того чтобы использовать `Math.abs`, лучше вычислить разницу напрямую в формате, который даст вам результат в нужном виде.
Вот пример того, как можно это сделать правильно:
```javascript
const moment = require('moment');
// Текущая дата
const now = moment(); // текущая дата и время
// Дата сервера
const serverTime = moment('2024-10-09 10:20:34.987'); // дата сервера
// Вычисляем разницу между датами
const duration = moment.duration(now.diff(serverTime));
// Получаем дни, часы, минуты и секунды
const days = Math.floor(duration.asDays());
const hours = duration.hours();
const minutes = duration.minutes();
const seconds = duration.seconds();
// Форматируем результат
const result = `${days} ${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
console.log(result);
```
В этом коде:
- Мы используем `moment.duration()` для вычисления разницы между `now` и `serverTime`.
- Затем мы извлекаем количество дней, часов, минут и секунд с помощью методов `asDays()`, `hours()`, `minutes()`, и `seconds()`.
- Наконец, мы форматируем отображение так, как вы хотите.
Этот метод должен корректно подсчитывать дни, так как мы используем `Math.floor()` для получения целого количества дней из `duration`. Если вы получите результат в виде `0 23:40:34`, это будет означать, что на момент запроса разница составляет 0 дней, 23 часа, 40 минут и 34 секунды.