Неправильная разница дат рассчитывается с использованием моментов - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь вычислить количество дней между двумя датами, используя moment js.

function (value) {
    var expiration= moment(value).format('DDMMYYYY');
    var today = moment().format('DDMMYYYY');
    var dayToExpiration = moment(expiration- today).format('D[days] ,H[hours]');

    console.log(today + " : " + expiration
    console.log(dayToExpiration);

Результат:

 11102018 : 28102020  //--> 11.10.2018 : 28.10.2018
 1 days ,6 hours //why only one day??

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Я получаю ошибки.этот работает для меня:

moment.duration(expiration.diff(today))._milliseconds / (1000*60*60*24));
0 голосов
/ 11 октября 2018

Краткий ответ:

Как сказал Джон Мадхаван-Риз в своем ответе, вы должны использовать момент Продолжительность , чтобы представить разницу между двумя моментами во времени.

Проблема в примере кода:

В своем коде вы создаете объект момента из разницы между expiration и today.Это значение интерпретируется моментом как число миллисекунд с начала эпохи Unix (см. moment(Number)), поэтому вы создаете моментный объект для случайного дня около 1 января 1970 года.(см. вывод moment(expiration- today).format()).Токен D в format() обозначает День месяца, поэтому он выводит «неправильный» .

Мое предлагаемое решение:

Вы можете вычислить разницу, используя момент * '1027 *diff(), затем вы можете создать длительность, используя moment.duration(Number).

Наконец, вы можете получить желаемый результат, используя плагин момента-продолжительности-формата (автор Джон Мадхаван-Риз: D)

Вот живой пример:

function getDiff(value) {
     var expiration= moment(value); // Parse input as momement object
     var today = moment(); // get now value (includes current time)
     // Calculate diff, create a duration and format it
     var dayToExpiration = moment.duration(Math.abs(today.diff(expiration))).format('D[days], H[hours]');

     console.log(today.format('DDMMYYYY') + " : " + expiration.format('DDMMYYYY'));
     console.log(dayToExpiration);
}

getDiff('2018-10-28');
<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/moment-duration-format/2.2.2/moment-duration-format.min.js"></script>
0 голосов
/ 11 октября 2018

Поскольку ваша переменная dayToExpiration должна быть объектом moment.Duration, а не строкой.

Разница между двумя датами-временами - это продолжительность, а не дата-время.

...