【问题标题】:Difference between two dates including the first and last day in JS两个日期之间的差异,包括JS中的第一天和最后一天
【发布时间】:2020-03-13 15:20:37
【问题描述】:

我有两个日期,第一个是开始日期,第二个是结束日期。

我必须用年数、月数和天数来翻译它。

例子:

    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}

我怎样才能做到这一点?

【问题讨论】:

  • 您可以尝试这种简单干净的方式const end = moment(new Date('2022-03-03')).add('1', 'days') 来实现您的目标。看看我发布的解决方案。

标签: node.js momentjs


【解决方案1】:

要实现您的预​​期行为,只需更改您的代码:

从此:

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

【讨论】:

    【解决方案2】:

    我认为这是因为在 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")
    

    亚历克斯。

    【讨论】:

    • 感谢您的解释!问题是系统用户输入文档的开始日期和到期日期,并且持续时间必须可见。添加毫秒可能是一个解决方案,但我正在寻找“更清洁”的东西。
    • @AlessioMarchi 您可以尝试这种简单干净的方式const end = moment(new Date('2022-03-03')).add('1', 'days') 来实现您的目标。看看我发布的解决方案。
    • 是的,就像@RashedRahat 说在结束日期使用.add(1, 'd') 就足够了。 const end = moment('2022-03-03').add('1', 'd')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多