【问题标题】:Moment js get first and last day of current monthMoment js获取当月的第一天和最后一天
【发布时间】:2017-01-09 02:34:45
【问题描述】:

如何在moment.js中以如下格式获取当月的第一天和最后一天以及时间:

2016-09-01 00:00

我可以像这样获取当前日期和时间: moment().format('YYYY-MM-DD h:m') 将以上述格式输出。

但是我需要获取当月第一天和最后一天的日期和时间,有什么办法吗?

编辑: 我的问题与this 不同,因为它要求用户已经拥有的给定月份,而我要求 当前 月份以及未提及的特定日期格式在另一个所谓的“重复”中。

【问题讨论】:

  • Moment.js 支持获取月份的第一天和最后一天的功能,您可以通过 moment().startOf('month') 和 moment().endOf( '月') 。我认为您应该查看this的答案
  • @TanLe 是的,但输出格式如下:Thu Sep 01 2016 00:00:00 GMT+0100 (GMT Summer Time)我想要我在问题中提到的格式
  • 该函数返回一天的时刻对象,因此您可以使用格式以您想要的任何格式输出。比如:moment().startOf('month').format('YYYY-MM-DD HH:mm')。
  • @AuditeMarlow 不错的尝试,但问题与我的编辑中解释的略有不同。

标签: javascript date momentjs


【解决方案1】:

如果有人错过了原始问题的 cmets,您可以使用内置方法(从 Moment 1.7 开始工作):

const startOfMonth = moment().startOf('month').format('YYYY-MM-DD hh:mm');
const endOfMonth   = moment().endOf('month').format('YYYY-MM-DD hh:mm');

【讨论】:

  • 不知道为什么有人删除了原来的 cmets 但这不是被接受的答案的原因是因为它是在接受答案几个月后发布的。
  • 感谢@user3574492 没什么大不了的,感谢您的澄清-如果您认为此答案是最好的答案,那么我认为可以将其更改为已接受的答案,即使稍后发布也是如此。
  • moment(1, "DD"); 将返回当月的第一天
  • 这里为什么需要clone
  • .Clone() 是必需的,因为许多函数会修改时刻日期。一个例子是 x = momentDate.add(1,"day");此处将修改momentDate,添加一天以及设置x。 StartOf month 会将时刻设置为月初。
【解决方案2】:

还有另一种方法可以做到这一点:

var begin = moment().format("YYYY-MM-01");
var end = moment().format("YYYY-MM-") + moment().daysInMonth();

【讨论】:

    【解决方案3】:

    不用moment.js也可以做到这一点

    在本机 Javascript 代码中执行此操作的方法:

    var date = new Date(), y = date.getFullYear(), m = date.getMonth();
    var firstDay = new Date(y, m, 1);
    var lastDay = new Date(y, m + 1, 0);
    
    firstDay = moment(firstDay).format(yourFormat);
    lastDay = moment(lastDay).format(yourFormat);
    

    【讨论】:

    • 这以默认日期格式Thu Sep 01 2016 00:00:00 GMT+0100 (GMT Summer Time) 输出,而不是我想要的格式:2016-09-01 00:00
    • 使用 moment 格式化日期 ... firstDay = moment(firstDay).format('MM/DD/YYYY'); lastDay = moment(lastDay).format('MM/DD/YYYY');
    • 以及如何使用此公式获得下个月的startdateenddate
    【解决方案4】:

    moment startOf()endOf() 是您正在寻找的答案。 例如:-

    moment().startOf('year');    // set to January 1st, 12:00 am this year
    moment().startOf('month');   // set to the first of this month, 12:00 am
    moment().startOf('week');    // set to the first day of this week, 12:00 am
    moment().startOf('day');     // set to 12:00 am today
    

    【讨论】:

      【解决方案5】:

      假设您正在使用日期范围选择器来检索日期。你可以做一些事情来得到你想要的。

      $('#daterange-btn').daterangepicker({
                  ranges: {
                      'Today': [moment(), moment()],
                      'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
                      'Last 7 Days': [moment().subtract(6, 'days'), moment()],
                      'Last 30 Days': [moment().subtract(29, 'days'), moment()],
                      'This Month': [moment().startOf('month'), moment().endOf('month')],
                      'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
                  },
                  startDate: moment().subtract(29, 'days'),
                  endDate: moment()
              }, function (start, end) {
            alert( 'Date is between' + start.format('YYYY-MM-DD h:m') + 'and' + end.format('YYYY-MM-DD h:m')}
      

      【讨论】:

        【解决方案6】:

        很简单,我们可以使用daysInMonth()endOf()

        const firstDay = moment('2016-09-15 00:00', 'YYYY-MM-DD h:m').startOf('month').format('D')
        const lastDay = moment('2016-09-15 00:00', 'YYYY-MM-DD h:m').endOf('month').format('D')
        

        【讨论】:

          【解决方案7】:

          我遇到了一些问题,因为我不知道 moment().endOf() 会改变输入日期,所以我使用了这个解决方法。

          let thisMoment = moment();
          let endOfMonth = moment(thisMoment).endOf('month');
          let startOfMonth = moment(thisMoment).startOf('month');

          【讨论】:

          • 如果您想使用相同的变量,请始终使用 moment().clone()。
          【解决方案8】:

          moment.js 中当前月份的第一个和最后一个日期

          console.log("current month first date");
              const firstdate = moment().startOf('month').format('DD-MM-YYYY');
          console.log(firstdate);
          
          console.log("current month last date");
              const lastdate=moment().endOf('month').format("DD-MM-YYYY"); 
          console.log(lastdate); 
          

          【讨论】:

            猜你喜欢
            • 2014-03-22
            • 1970-01-01
            • 2016-02-09
            • 2019-03-04
            • 1970-01-01
            • 2016-08-18
            • 1970-01-01
            • 2015-04-03
            • 2013-11-25
            相关资源
            最近更新 更多