Вам необходимо указать год для учета правил високосного года. Я генерирую месяцы, а затем, когда значение месяца или года обновляется, генерируются дни. getDaysInMonth
в уловке, чтобы получить правильное количество дней для данного месяца и года.
<div class="form-group">
<label for="selectedYear">Year</label>
<input name="selectedYear" [(ngModel)]="selectedYear" />
</div>
<div class="form-group">
<label for="selectedMonth">Month</label>
<select class="form-control pt-1" name="selectedMonth" [(ngModel)]="selectedMonth">
<option *ngFor="let month of months; let i = index" [value]="i+1">{{month}}</option>
</select>
</div>
<div class="form-group">
<label for="selectedDay">Day</label>
<select name="selectedDay" [(ngModel)]="selectedDay">
<option *ngFor="let day of days" [value]="day">{{day}}</option>
</select>
</div>
import { Component } from '@angular/core';
const getMonth = (idx) => {
var objDate = new Date();
objDate.setDate(1);
objDate.setMonth(idx-1);
var locale = "en-us",
month = objDate.toLocaleString(locale, { month: "long" });
return month;
}
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
months = Array(12).fill(0).map((i,idx) => getMonth(idx + 1));
selectedYear = 2004;
selectedMonth = 1;
selectedDay = 1;
public get days() {
const dayCount = this.getDaysInMonth(this.selectedYear, this.selectedMonth);
return Array(dayCount).fill(0).map((i,idx) => idx +1)
}
public getDaysInMonth(year: number, month: number) {
return 32 - new Date(year, month - 1, 32).getDate();
}
}
Вы можете попробовать это здесь: https://stackblitz.com/edit/angular-rqintz