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

У меня есть функция даты с datepicker (с Angular 8), но у меня проблема. например, когда я ввожу 36/04/2020 , он сохраняется в базе данных с датой 05/06/2020 . Я хочу, чтобы, если количество дней превышает количество дней в месяце, оно возвращает мне последний день (например, в моем случае необходимо ввести 30/04/2020 ). как это исправить и спасибо?

code .ts:

import { NativeDateAdapter, DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from "@angular/material";

    export class AppDateAdapter extends NativeDateAdapter {

        parse(value: any): Date | null {
            if ((typeof value === 'string') && (value.indexOf('/') > -1)) {
              const str = value.split('/');
              const year = Number(str[2]);
              const month = Number(str[1]) - 1;
              const date = Number(str[0]);
              return new Date(Date.UTC(year, month, date));
              ;
            }
            const timestamp = typeof value === 'number' ? value : Date.parse(value);
            return isNaN(timestamp) ? null : new Date(timestamp);
          }

          createDate(year: number, month: number, date: number): Date {
            return new Date(Date.UTC(year, month, date));
          }

          format(date: Date, displayFormat: Object): string {
            if (displayFormat === 'input') {
              let day: string = date.getUTCDate().toString();
              day = +day < 10 ? '0' + day : day;
              let month: string = (date.getUTCMonth() + 1).toString();
              month = +month < 10 ? '0' + month : month;
              let year = date.getUTCFullYear();
              return `${day}/${month}/${year}`;

            }
            // new Date(date.toDateString()).getUTCDate(); 
            return date.toDateString();

          }

       private _to2digit(n: number) {
           return (n);
           //return ('00' + n).slice(-2);
       } 
    }

    export const APP_DATE_FORMATS =
    {
       parse: {
           dateInput: {month: 'short', year: 'numeric', day: 'numeric'}
       },
       display: {
           // dateInput: { month: 'short', year: 'numeric', day: 'numeric' },
           dateInput: 'input',
           // monthYearLabel: { month: 'short', year: 'numeric', day: 'numeric' },
           monthYearLabel: 'inputMonth',
           dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},
           monthYearA11yLabel: {year: 'numeric', month: 'long'},
       }
    }

1 Ответ

0 голосов
/ 21 февраля 2020

Это даст вам последний день месяца =>

const day = new Date(2020, month + 1, 0)

Затем получите дату

day.getDate() it will return 31 for January

и, наконец, сравните

inputValue = inputValue > day.getDate() ? day.getDate() : inputValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...