IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Détection si la date est valide


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut Détection si la date est valide
    Bonjour,

    Je dois détecter si une valeur est une date ou non.

    J'ai essayé avec momentjs, datejs mais à chaque fois il me dit que pas une date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const testDate = this.testDate('1975-10-27T00:00:00.000Z');
    console.log(testDate);

    Ma fonction de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public testDate(value: any) {
      if(this.isDate(value)) {
        console.log("C'EST UNE DATE");
      } else {
        console.log("CE N'EST PAS UNE DATE");
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public isDate(value: any): boolean {
       isDate = String(value);
       return moment(isDate, 'YYYY-MM-DD', true).isValid();
    }
    J'ai aussi essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public isDate(value: any): boolean {
       isDate = String(value);
       return moment.tz(isDate, 'YYYY-MM-DD', true, 'Europe/Paris').isValid();
    }

    Merci de votre aide.

  2. #2
    bm
    bm est déconnecté
    Membre confirmé

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Points : 556
    Points
    556
    Billets dans le blog
    6
    Par défaut
    Ci-dessus n 'est pas du JS :

    this concerne une class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Rectangle {
      constructor(hauteur, largeur) {
        this.hauteur = hauteur;
        this.largeur = largeur;
      }
    https://www.webtoolkitonline.com/javascript-tester.html

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Certe mais meme en javacript la logique la meme mais cela ne change pas au prolbeme!....

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 124
    Points : 44 922
    Points
    44 922
    Par défaut
    Bonjour,
    as tu essayé de faire un simple test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const date = new Date("valeur de la date");
    return date != "Invalid Date";

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Oui bien sur j'avais fait cela mais regardez l'exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var txtTest = "Sous objet 1";
     
    var date = new Date(txtTest);
     
    var screen = document.getElementById( "screen" );
    var div = document.createElement( "div");
    div.innerHTML = date != "Invalid Date";
    screen.appendChild( div );
    ==> renvoie true ...
    Cela me considère Sous objet 1 comme une date valide ....

    Bizarre

  6. #6
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    et pourquoi pas :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const date = new Date('fausse date');
    console.log(date.getDate() > 0);

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Merci mais pareil .....

    j'ai fait aussi le test sur : https://www.webtoolkitonline.com/javascript-tester.html

    et même résultat me dit que c'est une date ....

  8. #8
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function checkDate(date) {
        if(date.getDate() > 0) {
            console.log('date valide');
        } else {
            console.log('date non valide');
        }
    }
    checkDate(new Date('fausse date')); // date non valide
    checkDate(new Date('2020-06-22 15:00')); // date valide
    je ne comprends pas ce qu'il te faut de plus

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Je viens de faire un copier coller de votre code avec mon texte et il me dit bien "date valide" alors que "Sous objet 1" n'est pas une date ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var txtTest = "Sous objet 1";
     
    function checkDate(date) {
        if(date.getDate() > 0) {
            return 'date valide';
        } else {
            return 'date non valide';
        }
    }
     
    var screen = document.getElementById( "screen" );
    var div = document.createElement( "div");
    div.innerHTML = checkDate(new Date(txtTest));
    screen.appendChild( div );
    Merci

  10. #10
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    effectivement, je viens de vérifier avec la string "Sous objet 1"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    checkDate(new Date('fausse date')); // date non valide
    checkDate(new Date('Sous objet 1')); // date valide
    si tu dump new Date('Sous objet 1'), tu constateras que c'est le 1er janvier 2001
    si tu dump new Date('1 1 1'), ça donne le même résultat : 1er janvier 2001

    => a mon avis, il doit détecter 3 mots dans la string 'Sous objet 1', et il essaye de l'interpréter au mieux qu'il peut
    => il doit se dire "il essaye de passer yyyy mm dd"
    comme il ne connait pas 'sous', il le remplace par 1 (qu'il doit interpréter comme l'année 2001)
    comme il ne connait pas 'object' il le remplace par 1 (qu'il doit interpréter comme le mois de janvier)

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonjour

    Et donc dans ce cas j'ai quel moyen pour qu'il me dise qe c'est pas une date mais un texte ?

    Merci

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 124
    Points : 44 922
    Points
    44 922
    Par défaut
    Tu sors d'où des données comme Sous objet 1 ?

    La façon de procéder pour la conversion en Date est sujette à erreur dès lors qu'elle finira par un chiffre, de plus le résultat obtenu ne sera pas le même sur FireFox et sur Chrome.

    Tu trouveras pas mal d'info sur MDN : Date.parse().

    Suivant la provenance des données tu n'aura pas d'autres choix que de faire en entrée des tests sur la chaîne reçue.

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonsoir,

    Cela sort d'un champ texte par exemple (input).

    En fait je doit détecter car je doit faire une action sur le texte hormis pour les dates....

    Merci

  14. #14
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    le plus simple serait alors de passer par une regexp

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Merci du conseil

  16. #16
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 124
    Points : 44 922
    Points
    44 922
    Par défaut
    Cela sort d'un champ texte par exemple (input).
    Il aurait été bon de le préciser dès le départ

    Outre la vérification à la volée, comme indiquée, il existe également les <input type="date"> qui pourrait te permettre de gérer cela sur les navigateurs modernes.



    PS : je déplace vers le forum JavaScript, la problématique n'ayant rien à voir avec NodeJS.

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 643
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    isValid() de moments.js

  18. #18
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 124
    Points : 44 922
    Points
    44 922
    Par défaut
    Le souci avec moment, dans le cas présent, est de bien savoir précisément ce que l'on veut comme format, car tout dépend de lui.

    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const laDate = "Sous objet 1";
    console.log(moment(laDate, "YYYY-MM-DD", true).isValid()); // return false
    console.log(moment(laDate).isValid());                     // return true avec warning
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const laDate = "1975-10-27T00:00:00.000Z";
    console.log(moment(laDate, "YYYY-MM-DD", true).isValid()); // return false
    console.log(moment(laDate).isValid());                     // return true
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const laDate = "1975-10-27T00:00:00.000";                                // sans le Z
    console.log(moment(laDate, "YYYY-MM-DDTHH:mm:ss.SSS", true).isValid());  // return true
    console.log(moment(laDate).isValid());                                   // return true
    et la liste peut être longue ...

  19. #19
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Ptit essai à l'ancienne, laborieux et tout et tout;

    Tu peux saisir jusqu'à 6 éléments de date, dans l'ordre année mois jour heures minutes secondes; il suffit de séparer les données par ce que tu veux; sors du champ pour tester.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p>
    <input type="text" id="ch" /> 
    </p>

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    const ch=document.querySelector("#ch");
    ch.addEventListener("blur",function(){
            let spl,spl1,spl2,spl3;
    	this.value=this.value.replace(/\D+/g," ").trim().split(/\D+/).slice(0,6);
    	spl=(this.value + " ").split(/\D+/).slice(0,6);
     
    	if(spl.length>3){
    		spl1=spl.slice(0,3).join(",");
    		spl2=spl.slice(3).join(":");
    		spl3=spl1+" "+spl2
    	}
    	else{spl3=spl.join(",")};
     
    	const d=new Date(spl3);
    	spl3=spl3.split(/\D+/);
    	const rep= (d.getFullYear()!=spl3[0] ||
                       (spl3[1] && d.getMonth()!=spl3[1]-1) || 
    		   (spl3[3] && d.getHours()!=spl3[3])) ? 
    		   "date invalide" : 
    		   "date valide:\n"+d;
     
    	alert(rep);
    })

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérifier qu'une date est valide
    Par delph_le dans le forum SAS Base
    Réponses: 2
    Dernier message: 17/04/2014, 14h54
  2. [Débutant] Textbox, Vérifier si la date est valide.
    Par Dedel_209 dans le forum C#
    Réponses: 6
    Dernier message: 14/01/2012, 15h48
  3. Vérifier si une date est valide ou non
    Par Juju54350 dans le forum C#
    Réponses: 2
    Dernier message: 21/09/2010, 14h20
  4. Réponses: 2
    Dernier message: 01/08/2007, 15h37
  5. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo