Pour un devoir je dois faire un formulaire d'inscription ou se trouve une date de naissance sauf qu'on a pas le droit d'utiliser le type date dans le input html. Il nous faut utiliser l'objet date de JS.
Je pense donc qu'il faut utiliser Date.Parse(maDate).
function controle(){
var date = "40/05/2001"
splitDate = date.split('/')
var myDate = splitDate[2] + "-" +splitDate[1] + "-" + splitDate[0]
console.log("Ma date est : " + myDate)
var d = new Date(myDate)
var myParse = Date.parse(d)
console.log(myParse)
switch(myParse){
case NaN:
console.log("DATE NON VALIDE")
default:
console.log("DATE VALIDE")
}
}Dans mon console.log(myParse), ça m'affiche "NaN" mais quand ça passe dans le switch, ça m'execute le default et non pas le cas NaN.
Comment faire ?
Essaie
case Number.NaN:
Le 03 mai 2020 à 19:19:32 cybevil a écrit :
Essaiecase Number.NaN:
Ça ne fonctionne pas non plus.
Effectivement je n'avais pas essayé.
Je n'ai pas trouver comment faire avec un switch mais tu peux utiliser la méthode isNaN dans une condition.
var date = "40/05/2001"
splitDate = date.split('/')
var myDate = splitDate[2] + "-" +splitDate[1] + "-" + splitDate[0]
console.log("Ma date est : " + myDate)
var d = new Date(myDate)
var myParse = Date.parse(d)
console.log(myParse)
if(isNaN(myParse))
console.log("DATE NON VALIDE")
else
console.log("DATE VALIDE")
Dans un switch :
var date = "40/05/2001"
splitDate = date.split('/')
var myDate = splitDate[2] + "-" +splitDate[1] + "-" + splitDate[0]
console.log("Ma date est : " + myDate)
var d = new Date(myDate)
var myParse = Date.parse(d)
console.log(myParse)
switch(isNaN(myParse)){
case true:
console.log("DATE NON VALIDE")
break;
default:
console.log("DATE VALIDE")
}
Merci beaucoup ! Tu me sauve, le isNaN fonctionne !
c'est pas la bonne méthode.
Apres un petit test :
var dateInput = '40/05/2001';
var date = new Date(dateInput);
if(isNaN(date.getDate()) {
console.log('pas bon');
} else {
console.log(date.getDate();
}
pas besoin de faire un parse manuel. Et c'est plus propre
Le 04 mai 2020 à 10:44:09 VinkingBanni a écrit :
Apres un petit test :var dateInput = '40/05/2001'; var date = new Date(dateInput); if(isNaN(date.getDate()) { console.log('pas bon'); } else { console.log(date.getDate(); }pas besoin de faire un parse manuel. Et c'est plus propre
J'ai bien vu ton message et j'ai donc décidé de tester la fonction.
J'ai une page de test avec ce code là :
<!DOCTYPE html>
<html lang="fr">
<head>
<title>Lire une valeur dans un champs de texte</title>
<meta charset="utf-8">
<style>
#bouton {
margin-top: 12px;
}
</style>
<script>
function controle() {
var date = '20/05/2001';
var myDate = new Date(date);
if (isNaN(myDate.getDate())) {
alert("DATE INVALIDE")
}
else {
alert("DATE VALIDE")
alert(myDate.getDate());
}
}
</script>
</head>
<body>
<h2>Lire une valeur dans un champs de texte</h2>
<form>
<input type="password" id="input" name="input" value=""><br>
<input type="submit" id="bouton" value="Contrôler" onclick="controle()">
</form>
</body>
</html> Cependant, bien que ma date soit => '20/05/2001', ça m'affiche date invalide dans mon alert (c'est surement dégueulasse d'utiliser les alert pour ça je m'en excuse).
De plus là doc de l'objet Date du JS nous dit quand à l'entré d'un string en paramètre de new Date :
Une chaîne de caractère représentant une date. La chaîne doit être dans un format reconnu par la méthode Date.parse() (conforme à la RFC 1123 de l'IETF ou à l'ISO8601).
Note : L'analyse de chaînes via le constructeur Date (ou via la méthode Date.parse()) est déconseillée car il existe différentes incohérences entre les différents navigateurs. La prise en charge des chaînes de format de la RFC 2822 est une simple convention. La norme ISO 8601 n'est pas complètement respectée car les chaînes qui décrivent uniquement des dates (ex. "1970-01-01") sont considérées en UTC et non en heure locale.
Donc je pense que le format jj/mm/aaaa n'est pas reconnu par le constructeur de Date.
Essaye ca plutotvar date =new Date('2001/05/20');
20/05/2001 est une notation Française, pour les US c'est 05/20/2001, pouvant poser des problèmes de parsing, privilégie de commencer par l'année ça sera toujours yyyy/mm/dd peut importe la localisation, c'est valable en js comme dans d'autre langage.
Sinon pour traiter les dates il y a la librairie momemtjs
https://momentjs.com/
Le 04 mai 2020 à 18:29:55 boucif a écrit :
Essaye ca plutotvar date =new Date('2001/05/20');
20/05/2001 est une notation Française, pour les US c'est 05/20/2001, pouvant poser des problèmes de parsing, privilégie de commencer par l'année ça sera toujours yyyy/mm/dd peut importe la localisation, c'est valable en js comme dans d'autre langage.Sinon pour traiter les dates il y a la librairie momemtjs
https://momentjs.com/
Le problème, c'est que je ne peut pas. C'est un projet pour la fac et ils nous demandent de faire des trucs bizarres (genre on a pas le droit d'utiliser des types email ou date dans nos input HTML, ou de pattern pour nos mdp). Donc il nous faut trouver une solution et dans ce cas précis, la date doit pouvoir être rentrée au format jj/mm/aaaa avec un type texte. A nous de nous débrouiller pour que ça fonctionne ensuite.
Déja dans un premier temps émule le comportement d'un datime
enfaite tu modifie ton input en js en datetime
Tu fais un split sur ta date et tu remets dans le bonne ordre
Le 04 mai 2020 à 19:44:34 boucif a écrit :
Tu fais un split sur ta date et tu remets dans le bonne ordre
Ducoup ça reviens à faire ce que j'ai fait au début
Oui pourquoi t’as changé ça ?
Le 04 mai 2020 à 19:52:59 boucif a écrit :
Oui pourquoi t’as changé ça ?
Je l'ai pas changé. J'ai juste testé dans un autre fichier une autre proposition de quelqu'un ici