【问题标题】:How to get last day of a given month for a given year with moment如何通过时刻获取给定年份的给定月份的最后一天
【发布时间】:2020-04-06 18:58:36
【问题描述】:

我正在做一个 Angular 项目。我需要使用时刻给定年份的给定月份的最后一天。但是有一些限制。我没有正确的mm-dd-yyyy 等格式的完整日期。而且数据类型是any。我们将有两个输入字段,一个用于month,另一个用于year。然后单击Get last day 按钮,我应该得到数字格式的最后一天,因为稍后我必须对其执行一些算术运算。看很简单:

timeselector.component.html

<input [(ngModel)]="month"/>
<input [(ngModel)]="year"/>
<button (click)="getLastDate()">Get last date</button>

<p>Last date of {{month}}/{{year}} is: </p>

这就是我想要的:

如果月=12,年=1990;那么 lastDate 应该是 31

如果月=11,年=2020;那么 lastDate 应该是 30

应注意闰年:

如果月=2,年=2020;那么 lastDate 应该是 29

如果月=2,年=2021;那么 lastDate 应该是 28

timeselector.component.ts

import { Component, DoCheck, OnInit } from '@angular/core';
import moment from 'moment';

@Component({
  selector: 'app-timeselector',
  templateUrl: './timeselector.component.html',
  styleUrls: ['./timeselector.component.css']
})
export class TimeselectorComponent {

  month=12;
  year=1990;

  lastDate="";

  getLastDate() {
  // logic to get last date of the given month NOT WORKING

  // const fromDate = moment(this.month, 'MM-DD-YYYY', true);
  // const toDate = moment(this.year, 'MM-DD-YYYY', true);
  // const customStartMonth = moment(fromDate, 'MM-DD-YYYY').month();
  // const customStartYear = moment(fromDate).year();
  // const customendMonth = moment(toDate, 'MM-DD-YYYY').month();
  // const customendYear = moment(toDate).year();

  }
}

我尝试了很多答案,但它们与我的不同。我还创建了一个stackblitz。请帮我。是否可以立即使用,或者我将不得不编写一些自己的自定义代码。请纠正我。

【问题讨论】:

    标签: angular typescript momentjs


    【解决方案1】:

    获取下个月的第一天,然后subtract 1 天。

    let month = 2,
      year = 2020,
      lastDate = "";
    
    var now = moment(`${month}/1/${year}`).add(1,'months').subtract(1, 'days');
    
    alert(now);
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.2.1/moment.min.js"&gt;&lt;/script&gt;

    【讨论】:

      【解决方案2】:

      根据您的演示:

      moment(this.year + '-' + this.month).endOf('month').format('DD')
      

      【讨论】:

      • 我试过这个。有效。可以解释答案,以便我可以向我的团队负责人证明。
      【解决方案3】:

      一个快速的解决方案是这样的:

      const getLastDay = (year, month) => moment().year(year).month(month - 1).daysInMonth();
      
      console.log(getLastDay(2020, 2));
      console.log(getLastDay(2021, 2));
      console.log(getLastDay(1990, 12));
      console.log(getLastDay(2020, 11));
      &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"&gt;&lt;/script&gt;

      【讨论】:

      • 这个解决方案也是正确的。我也试过这个。 :-) 但是现在我接受上面的答案,因为它对我来说更容易。但是,我会向我的技术负责人展示这两个答案,因此,我稍后可能会更改我的投票。非常感谢这个答案:-)
      猜你喜欢
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 2014-11-21
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 2016-01-13
      相关资源
      最近更新 更多