【问题标题】:Momentjs how to get next month last dateMomentjs如何获取下个月的最后一个日期
【发布时间】:2018-03-06 02:51:03
【问题描述】:

我正在尝试获取下个月的最后一个日期,由于某种原因,momentjs 返回了错误的日期

例如:

console.log(moment('02/28/2018', "MM/DD/YYYY").add(i, 'M'));

返回:

moment("2018-03-28T00:00:00.000")

正确的日期应该在哪里:

moment("2018-03-31T00:00:00.000")

【问题讨论】:

  • a) 获取今天的日期。 b) 将日期设置为 1。c) 加 2 个月 ... d) 减 1 天
  • 将 1 个月添加到 'm' 的第 n 天将导致 'm+1' 的第 n 天 - 那么,这是怎么回事错误?
  • @JaromandaX——你不需要先设置日期,月份和日期可以一次性设置,例如在 POJS 中,您可以执行以下操作:var d = new Date(2017,11,31); d.setMonth(d.getMonth() + 2, 0); 返回 1 月 31 日。添加 2 个月不会通过先添加月份然后添加日期来滚动额外的一个月,月份和日期都是同时设置的。 ;-)
  • 我从来不知道setMonth!每天学习一些东西

标签: javascript date momentjs


【解决方案1】:

使用 .add() 您只是在实际日期上添加一个月,但您还想转到本月的最后一天,为此您可以使用 .endOf():

moment('02/28/2018', "MM/DD/YYYY").add(1, 'M').endOf("month")
// 2018-03-31T23:59:59.999Z

【讨论】:

  • 对于任何想知道的人:如果下个月的天数少于当前天数,此解决方案也是安全的。所以moment('01/31/2018').add(1, 'M') 的结果是2018-02-28T23:59:59.999Z
【解决方案2】:

您将 1 个月添加到 2/28,因此您得到 3/28。它只会增加月份部分。

要获取该月的最后一天,您可以使用:

// Should be 12/31/2018 23:59:59
console.log(moment("2018-12-01").endOf("month").toString());

// Should be last day, hour, minute, and second of the current month
console.log(moment().endOf("month").toString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment.min.js"></script>

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 2021-06-07
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多