Преобразовать строку даты ddmmyy в dd / mm / yyyy в angular ng datepicker - PullRequest
0 голосов
/ 28 апреля 2020

Я использую NgbDatePicker проблема в том, что когда пользователь нажимает на тумблер и выбирает дату, это означает, что он одновременно конвертирует требуемый формат dd/mm/yyyy, вместо выбора пользователь вводит дату в виде строки, как ddmmyyyy, но не конвертирует до dd/mm/yyyy (например, от 10072020 до 10/07/2020) разделение не работает должным образом в CustomDateParserFormatter. Пожалуйста, помогите мне, как решить эту проблему, и я не знаю, как поступить. component.ts

import { Injectable } from '@angular/core';
import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';

@Injectable()
export class CustomDateParserFormatter {
    parse(value: string): NgbDateStruct {
        if (!value) {
            return null;
        }
        const parts = value;
        parts.split('/');
        console.log("first calling");
        return { year: +parts[0], month: +parts[1], day: +parts[2] } as NgbDateStruct;

    }
    format(date: NgbDateStruct): string {
        // tslint:disable-next-line:prefer-template
        console.log("second calling");
        return date ? ('0' + date.day).slice(-2) + '/' + ('0' + date.month).slice(-2) + '/' + date.year : null;
    }
}

component. html

<div class="input-group datePicker">
    <input class="form-control" placeholder="DD/MM/YYYY" ngbDatepicker formControlName="dateofBrith"
        [minDate]="{year: 1945, month: 1, day: 1}" [maxDate]="{year: 2020, month: 12, day: 31}"
        name="dp" ngbDatepicker #d="ngbDatepicker" (ngModelChange)="changeDob($event)"
        maxlength="10">
    <div class="input-group-append">
        <button class="btn calendar btn-custom btn-outline-secondary" (click)="d.toggle()"
            type="button"><img src="/assets/images/dateicon.png"></button>
    </div>
</div>

В console.log ("firstcalling") разделение строки не работает, когда пользователь вводит значение напрямую, его следует преобразовать в dd/mm/yyyy. Ребята, можете ли вы помочь мне, как преобразовать строку даты ddmmyyyy в формат даты dd/mm/yyy.

1 Ответ

0 голосов
/ 28 апреля 2020

Первым делом вы должны изменить код

const parts = value;
parts.split('/');

на этот

const parts = value.split('/');

Также вам необходимо проверить его после разбиения. проверка нижеприведенного условия, если она содержится / т. е. введена вручную или нет.

if(parts.length === 3) {
  return { year: +parts[0], month: +parts[1], day: +parts[2] } as NgbDateStruct;
}
else {
  return { year: +value.substring(0,2), month: +value.substring(2,4), day: 
           + value.substring(4,8) } as NgbDateStruct;
}
...