2016-10-11 5 views
0

Hier sind zwei eckige2 benutzerdefinierte Validierungen, die ich geschrieben habe, funktioniert die erste validateAge, aber die zweite validateDob nicht ... der Unterschied ist die validateAge verwendet die Komponente, die ich bin und ist ein textbasiertes Feld, das zweite muss ein Datumseingabefeld verwenden und den Unterschied zwischen dem heutigen Datum und dem Geburtsdatum finden, um das tatsächliche Alter zu finden und es dann mit dem Altersfeld zu messen. aber etwas nicht stimmt ... irgendwelche IdeenWarum funktioniert meine benutzerdefinierte Validierung in Angular2 nicht?

function validateAge(control: FormControl): { [s: string]: boolean } { 
    if (parseInt(control.value) <= 0) { 
    return {invalidAge: true}; 
    } 
} 

function validateDob(control: FormControl): {[s:string]: boolean}{ 
    var today = new Date(); 
    var calcAge = today - control.value; 
    if (calcAge != parseInt([{age}])){ 
    return {invalidDate: true} 
    } 
} 
+0

Probieren Sie 'Math.floor (calcAge)' in Ihrer Vergleichsaussage. – Feathercrown

+0

Was ist der tatsächliche Wert in control.value? – epascarello

+0

Sorry, control.value ist ein eingegebenes Geburtsdatum ... wie 03/01/1978 ist es

Antwort

1

Das Problem, das Sie hier haben, ist, dass Ihr control.value ist kein Date-Objekt, sondern die String-Darstellung.

var today = new Date(); 

Differenz in Millisekunden zwischen dem aktuellen Zeitstempel und dem eingegebenen Wert

var diff = today - new Date(control.value); 

Division durch ms pro Jahr und nehmen Sie den Boden

var calcAge = Math.floor(diff/ (1000*60*60*24*365))); 

Jetzt tun, was Vergleich Sie die entsprechende müssen gegen Wert. Sie haben uns nicht gezeigt, was Ihr Altersobjekt ist, also weiß ich nicht wirklich, nach welchem ​​Vergleich Sie suchen.

if (calcAge < someAgeThreshold)){ 
    return {invalidDate: true} 
} else { 
    return null; 
} 

Beachten Sie auch, dass mit benutzerdefinierten Validierung der Validator keine Fehler zurückgibt, wenn Sie mit einem Wert null und nichts zurückgeben wird als einen Fehler haben.

+0

du bist super !! Danke!! –

+0

Gern geschehen. Wenn diese Antwort Ihnen helfen würde, einen vollständigen und funktionellen Validator zu erhalten, würden Sie es als akzeptierte Antwort hinstellen? – silentsod

+0

noch eine kurze Frage ... in validateDob Routine ... Ich habe Probleme, den Wert eines Eingabefeldes ... Alter. Mein Kollege sagt mir, dass du @viewchild verwenden sollst. –

Verwandte Themen