Как получить последний день данного месяца для данного года с моментом - PullRequest
0 голосов
/ 06 апреля 2020

Я работаю над проектом Angular. Мне нужен последний день данного месяца для данного года, используя момент. Но есть некоторые ограничения. У меня нет полной даты в правильном формате mm-dd-yyyy, et c. А также, что типы данных any. У нас будет два поля ввода, одно для month, а другое для year. Затем по нажатию кнопки Get last day я должен получить последний день в формате цифр c, потому что позже я должен выполнить некоторую арифметику c. Видите, это очень просто:

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 . Пожалуйста, помогите мне. Это даже выполнимо в данный момент, или мне придется написать собственный код. Пожалуйста, поправьте меня.

Ответы [ 3 ]

2 голосов
/ 06 апреля 2020

Получить первый день следующего месяца, а затем вычесть 1 день из него.

let month = 2,
  year = 2020,
  lastDate = "";

var now = moment(`${month}/1/${year}`).add(1,'months').subtract(1, 'days');

alert(now);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.2.1/moment.min.js"></script>
1 голос
/ 06 апреля 2020

На основании вашей демонстрации:

moment(this.year + '-' + this.month).endOf('month').format('DD')
1 голос
/ 06 апреля 2020

Быстрое решение будет следующим:

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));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
...