【问题标题】:How to get date of last september dynamically with moment.js如何使用 moment.js 动态获取去年 9 月的日期
【发布时间】:2017-10-27 08:41:47
【问题描述】:

我需要使用 moment.js 的去年 9 月的日期 - 但是是动态的。

当前日期

currentDate:string = moment().format('YYYY-MM'); // This will be 2017-10

如何知道上一个 9 月是从当前日期算起的时间?我需要这样的想法:

lastSteptember = moment(this.currentDate).getDateOfLast('september').format('YYYY-MM');

所以现在的结果是:

2017-09

但 3 个月前结果会是另一个:

2016-09

我如何使用 moment.js 处理这个问题?

【问题讨论】:

  • month() 是您要找的吗?我没有完全理解你想要做什么。到目前为止,您自己尝试了什么?
  • month() 给我当前月份。但我需要最后九月作为结果。我正在写一个申请,其中一年从九月开始,到九月结束。因此,要获取具体数据,我需要从当前月份知道去年 9 月是哪一年。
  • month(8)month('September') 也可用作设置器,如果您想自定义时刻行为,请参阅文档的 Customize 部分。
  • 为了帮助读者,请标记您的问题的答案。
  • 直到两天后我才能标记我已经实施的解决方案,因为这是我自己的答案..

标签: javascript angular momentjs ionic3 angular2-moment


【解决方案1】:

我不知道如何让它与时刻一起工作。但是您可以使用我的函数按月号获取上个月:

var getLastMonth = function(month){
        if(month<1 || month>12) return undefined;
        let year = (month<=moment().month())? (moment().year()) : (moment().year()-1);
        return moment(month + "-" + year, "MM-YYYY");
}

使用它:

getLastMonth(11); //return 11-2016

getLastMonth(10); //return 10-2017

getLastMonth(9); //return 09-2017

【讨论】:

    【解决方案2】:

    我找到了一个很好的解决方案并像这样解决了它:

    currentYear: number = moment().year();
    lastYear: number = moment().subtract(1, 'years').year();
    nextYear: number = moment().add(1, 'years').year();
    
    if(moment().isSameOrAfter(this.currentYear + '-09-01', 'month')) {
      this.currentServiceYearStartDate = this.currentYear + '-09-01';
      this.currentServiceYearEndDate = this.nextYear + '-08-31';
    } else {
      this.currentServiceYearStartDate = this.lastYear + '-09-01';
      this.currentServiceYearEndDate = this.currentYear + '-08-31';
    }
    
    console.log('Startdate: ' + this.currentServiceYearStartDate);
    console.log('Enddate: ' + this.currentServiceYearEndDate);
    

    https://momentjs.com/docs/#/query/is-same-or-after/

    【讨论】:

      【解决方案3】:

      如果给定月份小于当前月份,该函数将返回上一年的月份,否则返回当前年份的月份。

        function getMonthWithPresentOrPastYear(month, format) {
            currentMonth = parseInt(moment().format('M'));
            givenMonth = parseInt(moment().month(month).format('M'));
            format = format || 'YYYY-MM';
      
            return (givenMonth >= currentMonth) ?
              moment().month(month).format(format) : //  Present
              moment().month(month).subtract(1, 'year').format(format); // Past
          };
      
          getMonthWithPresentOrPastYear('January'); // returns '2016-01'
          getMonthWithPresentOrPastYear('September'); // returns '2016-09'
          getMonthWithPresentOrPastYear('October'); // returns '2017-10'
          getMonthWithPresentOrPastYear('December', 'YYYY/DD'); // returns '2017/12'
      

      【讨论】:

        【解决方案4】:

        您可以尝试以下方法:

        Object.getPrototypeOf(moment()).getLast = function(month,format="YYYY-MM"){
         var date;
         if(this.diff("01 "+month+" "+this.year()) >= 0 || this.format("MMMM").toLowerCase() === month.toLowerCase)
            date = moment(this).month(month);
          else
            date = moment(this).month(month).subtract(1,"years");
         return date.format(format);
        });
        

        在上面的 JavaScript 中,我们检查当前时刻对象中的月份是否已经过去。

        这使我们可以直接从任何时刻对象和任何月份进行检查,例如:

        var customDate = moment("01 December 2001");
        customDate.getLast("September"); //"2001-09"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-19
          • 2015-01-06
          • 2018-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多