javascript - Formatarea timpului în Typescript Angular


Vreau să iterez time în FormArray și primesc timpul de la API în formatul de mai jos:

14.21.00

Vreau să formatez acest timp astfel:

2:21 PM

Încerc să formatez folosind Angular DatePipe astfel:

{{summon.value.summonTime | date :'shortTime' }}

dar a apărut eroarea:

Eroare: InvalidPipeArgument: 'Nu se poate converti "14.21.00" într-o dată' pentru pipe-ul 'DatePipe'

aici am reprodus în stackblitz

Pe baza cercetărilor mele, 14.21.00 nu este un format de timp acceptat în JavaScript/TypeScript, dacă există vreun ghid sau sugestie pentru a rezolva acest lucru.

Răspuns #1

Încearcă asta (testat pe codul tău stackblitz):

time:{{'1990-10-10 '+ summon.value.summonTime.split('.').join(':') | date:'shortTime' }}

Pentru a folosi pipe-ul „date”, timpul trebuie să urmeze și o dată, astfel încât putem trece orice dată doar pentru a valida pipe-ul date. De exemplu, acesta funcționează: {{'1990-10-10 01:02:03' | date:'shortTime'}}, iar acesta nu funcționează: {{'01:02:03' | date:'shortTime'}}.

De asemenea, am înlocuit "." (puncte) din timp cu ":" folosind split și join pentru a obține formatul necesar.

Răspunsul #2

Sper că îți merge grozav!!!

Creează un nou Pipe în folderul dorit. Odată ce ai terminat, te rugăm să furnizezi detalii în modulul (import și declarație): -

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'dateTransformer'
})
export class DateTransformerPipe implements PipeTransform {

  transform(value: any, args?: any): any {
    return value && value.length > 0 ? value.replace('.', ':') : value;
  }
}

Odată terminat, actualizează acest lucru în fragmentul tău: -

<ng-container [formGroupName]="i">
  <input type="checkbox" formControlName="isChecked" />
  {{ summon.value.summonTime | dateTransformer }}
  item: {{ summon.value.itemNo }}
  <br />
  time:{{ summon.value.summonTime | dateTransformer }}
  <br />
</ng-container>

Sper că am reușit să îți rezolv problema! Programare fericită!! Noroc!!!