【问题标题】:How to properly add 1 month from now to current date in moment.js如何在moment.js中正确添加从现在到当前日期的1个月
【发布时间】:2016-01-31 03:41:42
【问题描述】:

我阅读了 moment.js 的文档,如果您想从当前日期时间添加 1 个月,请使用此代码

var moment = require('moment');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');

但现在的问题是,没有正确添加日期,例如 假设当前日期是 31/10/2015,用代码解释

var currentDate = moment().format('DD-MM-YYYY');
var futureMonth = moment().add(1, 'M').format('DD-MM-YYYY');

console.log(currentDate) //  Will result --> 31/10/2015
console.log(futureMonth) //  Will result --> 30/11/2015 

如果你看一下当前的日历时间,距离31/10/2015 1 个月应该是1/12/2015

谁能给我一些关于如何解决这个问题的意见。

谢谢

【问题讨论】:

  • 我从当前日历时间得到了这个想法,如果那是你所要求的。
  • 我猜你要找的是moment().add(30, "days")
  • 似乎momentjs中的定义是,如果您有月末并添加1个月,它将在下个月结束。这对我来说似乎非常理智和可预测
  • 一个月并不总是 30 天,所以moment().add(30, "days") 在技术上并不是正确的答案。
  • 请不要把不合适的东西称为合适的。我建议以某种方式更改问题的标题。目前它具有误导性。

标签: javascript node.js date momentjs


【解决方案1】:
var currentDate = moment('2015-10-30');
var futureMonth = moment(currentDate).add(1, 'M');
var futureMonthEnd = moment(futureMonth).endOf('month');

if(currentDate.date() != futureMonth.date() && futureMonth.isSame(futureMonthEnd.format('YYYY-MM-DD'))) {
    futureMonth = futureMonth.add(1, 'd');
}

console.log(currentDate);
console.log(futureMonth);

DEMO

编辑

moment.addRealMonth = function addRealMonth(d) {
  var fm = moment(d).add(1, 'M');
  var fmEnd = moment(fm).endOf('month');
  return d.date() != fm.date() && fm.isSame(fmEnd.format('YYYY-MM-DD')) ? fm.add(1, 'd') : fm;  
}

var nextMonth = moment.addRealMonth(moment());

DEMO

【讨论】:

  • 只是想知道这段代码是否灵活?或者它只是解决当前日期问题 31/10/2015 - 1/12/2015?
  • 这只是另一种方式出错 - 七月和八月都有 31 天。如果您在 7 月 31 日加上一个月,您将得到 9 月 1 日。
  • 哇,我在 1 月的最后一天(即 31 日)进行了测试,效果很好。谢谢!
【解决方案2】:

根据最新的doc你可以做到以下几点-

添加一天

moment().add(1, 'days').calendar();

添加年份

moment().add(1, 'years').calendar();

添加月份

moment().add(1, 'months').calendar();

【讨论】:

  • 这个答案是错误的,没有按照上面的要求正确加一个月
  • 尝试moment('2020-03-30').add(1, 'months'),然后与moment('2020-03-31').add(1, 'months')进行比较。结果会一样,这是错误的。
  • @TomaszKasperczyk Pl。在这里报告 - github.com/moment/moment/issues
【解决方案3】:

你可以试试

moment().add(1, 'M').subtract(1, 'day').format('DD-MM-YYYY')

【讨论】:

    【解决方案4】:

    startDate = "20.03.2020";
    var newDate = moment(startDate, "DD-MM-YYYY").add(5, 'days');
    console.log(newDate)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2012-04-16
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多