Разница между двумя датами, включая первый и последний день в JS - PullRequest
1 голос
/ 13 марта 2020

У меня есть две даты, где первая - это дата начала, а вторая - конец даты.

Я должен перевести это число лет, месяцев и дней.

Пример:

    const start = moment(new Date('2021-03-03'))
    const end = moment(new Date('2022-03-03'))
    const difference = moment.duration(end.diff(start))
    const days = difference.days() //30
    const months = difference.months() // 11
    const years = difference.years() // 0

результат:

{"days":30,"months":11,"years":0}

Но мое ожидаемое поведение:

{"days":0,"months":0,"years":1}

Как мне этого достичь?

Ответы [ 2 ]

2 голосов
/ 13 марта 2020

Чтобы добиться ожидаемого поведения, просто измените код:

с этого:

const end = moment(new Date('2022-03-03'))

на это:

const end = moment(new Date('2022-03-03')).add('1', 'days')

Это даст: {"days":0,"months":0,"years":1}

Окончательный полный обновленный код:

const start = moment(new Date('2021-03-03'))
const end = moment(new Date('2022-03-03')).add('1', 'days')
const difference = moment.duration(end.diff(start))
const days = difference.days() // 0
const months = difference.months() // 0
const years = difference.years() // 1
1 голос
/ 13 марта 2020

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

Например, я пытаюсь использовать .startOf('d') и .endOf('d'), и вот результаты:

const start = moment(new Date('2021-03-03')).startOf('d')
const end = moment(new Date('2022-03-03')).endOf('d')
moment("2021-03-03T00:00:00.000")     
moment("2022-03-03T23:59:59.999")

Алекс.

...