2017-09-25 5 views
1

Was ich verwendeAngular/MomentJS - Bindung formControlName zu md-picker

  • Angular
  • Moment.js
  • Firebase

Was ich versuche zu erreichen

  • Wenn das Datum Zeitstempel von Feuerbasis zurückkehren, konvertiere ich es wieder zu einem gültigen/lesbaren Datum

  • Für mein HTML-Eingabefeld (mdDatePicker) die zurück und konvertierte das Datum anzuzeigen.

Ausgabe

  • Wenn die 'formControlName' verwenden, die gleiche Art, wie ich es erfolgreich für alle Eingänge meiner anderen Text/Checkbox verwenden, erhalte ich folgende Fehlermeldung:

ERROR Error: Datepicker: value not recognized as a date object by DateAdapter

Fragen

  1. Wie nehme ich meinen zurückgegebenen Wert und lasse die Datumsauswahl anzeigen?

HTML

<input mdInput [mdDatepicker]="picker" (focus)="picker.open()" formControlName="album_date" required /> 
 
<label class="vs__input__label"> Date </label> 
 
<md-datepicker #picker></md-datepicker>

Komponente TS

var timestamp = albumToDisplay.album_date; 
 
var albumDate = moment.unix(timestamp).format("MM/DD/YYYY"); 
 
     
 

 
this.albumDetails = this.formBuilder.group({ 
 
    album_title: [albumToDisplay.album_title], 
 
    album_date: [albumDate] 
 
});

Jede Hilfe wird sehr geschätzt.

UPDATE

ERROR Error: Datepicker: Value must be either a date object recognized by the DateAdapter or an ISO 8601 string. Instead got: 1504784461

Jede Idee, wie diese Vergangenheit zu bekommen?

+0

Der Fehler ist Ihnen zu sagen, dass es nicht erkennen können, was Sie füttern sie als ein date-Objekt, was wahrscheinlich bedeutet, dass Ihre Zeile 'moment.unix (timestamp) .format ("MM/DD/YYYY") etwas anderes als ein date-Objekt zurückgibt (ich nehme an, dass nach dem' format 'es zu einem String) – ruedamanuel

Antwort

0

So nach ein bisschen das Hantieren funktioniert:

var albumTimeStamp = albumToDisplay.album_date; 
 
var albumDateFormatted = moment.unix(albumTimeStamp).format("MM/DD/YYYY"); 
 
var albumDateISO = moment(albumDateFormatted).toISOString();

0

Moment format Methode gibt eine Zeichenfolge zurück, so dass Sie nicht brauchen. Es scheint auch, dass mdDatePicker das Datum intern konvertiert, so dass Sie nicht einmal einen Moment benötigen, damit dies funktioniert.Alles, was Sie tun:

this.albumDetails = this.formBuilder.group({ 
    album_title: [albumToDisplay.album_title], 
    album_date: [albumToDisplay.album_date] 
}); 
+0

Danke für die Antwort @everest. Leider bekomme ich hier den gleichen Fehler. Wenn ich meinen obigen Code oder Ihren Code auf einer Standard-Texteingabe verwende, wird der Zeitstempel (bei Verwendung Ihres Codes) oder der formatierte String (bei Verwendung meines Codes) zurückgebracht. Wenn Sie jedoch versuchen, es in den 'md-datepicker' zu integrieren, wird der gleiche Fehler erzeugt. – MegaTron

+0

Ich habe auch ein Update zu meiner Frage mit etwas 'Fortschritt' hinzugefügt. – MegaTron

+0

Aus den Augen müssen Sie nur Ihren Unix-Zeitstempel zu einem JavaScript-Datum konvertieren – Everest

Verwandte Themen