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 :

Contrôle saisie date(date supérieure à la date actuelle)


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut Contrôle saisie date(date supérieure à la date actuelle)
    Salut
    J'ai besoin d'effectuer un contrôle sur la date saisie dans un formulaire. je ne suis pas arrivée à vérifier cette condition: la date saisie soit supérieure à la date actuelle. comment faire?
    merci pour votre aide

    Code : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    function surligne(champ, erreur)
    {
       if(erreur)
          champ.style.backgroundColor = "#fba";
       else
          champ.style.backgroundColor = "";
    }
     
    function verifDate(champ){
     
    	var dateJour = new Date();
    	//var messretour = "La date saisie est incorrect\nLa date doit être saisie dans l'ordre suivant AMJ\nelle doit être ultèrieur à la date actuelle "
         //   + dateJour.getFullYear() + '-' + (dateJour.getMonth()+1) + '-' + dateJour.getDate();
     
    	champ.value = champ.value.replace("-","");
    	//vérifier taille date
    	if (champ.value.length != 8){
    		 surligne(champ, true);
    	      return false;
    	}
     
    	//controle caractère numérique
    	if (IsNumeric(champ.value) == false){
    		 surligne(champ, true);
    	      return false;
    	}
    	var aaaa = champ.value.substring(0,4);
    	var mm = champ.value.substring(4,2);
    	var jj = champ.value.substring(4,2);
    //	var datenew = aaaa+'-'+mm+'-'+jj;
     
    	d2 = new Date(0);
    	d2.setFullYear(aaaa, mm-1, jj);
     
    //	if (isDateValid(datenew) == false){
    	//	 surligne(champ, true);
    	  //    return false;
    	//}
     
    	var dates = new Date(aaaa,mm-1,jj);
    //	var datesaisie =dates.getTime();
    	// var dateMini = dateJour.getTime();
     
    	//Controle date supérieure à la date actuelle
    	if (d2 <= dateJour )
    		{
    		 surligne(champ, true);
    	      return false;
     
    		}
     
     
    	}
    function IsNumeric(x)
    {
    var checkOK = "0123456789-";
      var checkStr = x;
      var allValid = true;
     
      var i,j;
      var allNum = "";
      for (i=0;  i < checkStr.length;  i++)
      {
        ch = checkStr.charAt(i);
        for (j=0;  j < checkOK.length;  j++)
          if (ch == checkOK.charAt(j))
            break;
        if (j == checkOK.length)
        {
          allValid = false;
          break;
        }
        allNum += ch;
      }
      if (!allValid)
      {
      return (false);
      }
      return (true);
     
    }
    function isDateValid(chaineDate) {
     
    // CONTROLE LA VALIDITE D UN CHAMP DATE
    //alert(chaineDate);
       if (chaineDate == "") return false;
       var ladate = (chaineDate).split("-");
     
       if ((ladate.length != 3) || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2]))) return false;
     
       var unedate = new Date(eval(ladate[0]),eval(ladate[1])-1,eval(ladate[2]));
     
       var annee = unedate.getYear();
       if ((Math.abs(annee)+"").length < 4) annee = annee + 1900;
       //return(true);
       return ((unedate.getDate() == eval(ladate[2])) && (unedate.getMonth() == eval(ladate[1])-1) && (annee == eval(ladate[0])));
    }

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Question, pourquoi ne pas avoir choisit des "select avec options" pour les dates ainsi tu n'a pas a devoir setter en js ses valeurs?
    Tu devra de toute façon les setter côté serveur, l'un ne va pas s'en l'autre, mais comme l'utilisateur, n'a pas de donnée à saisir de lui même, tu n'aura pas a faire tout se boulot.

    Bref si c'est une contrainte demandé pour x raison, sinon dommage que tu n'exploite cette piste en html simple a mettre en oeuvre, et pour t'éviter les codes js qui sont nécéssaire pour ce type de scénario.

    De plus ne jamais avoir confiance au utilisateur, c'est vital .

    Bonne soirée.

  3. #3
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    C'est-à-dire donner un choix fixe de date ? Non, je veux donner un choix libre de date. Savez-vous comment complémenter ce code que j'ai fourni ?

    J'ai juste besoin d'un code qui vérifie que la date est ultérieure à la date actuelle.

    Merci, bonne soirée à vous aussi.

  4. #4
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Pour du tout fait :
    Code : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    function compar(sdate1,sdate2)
    {
     
    var date1 = new Date();
    date1.setFullYear(sdate1.substr(6,4));
    date1.setMonth(sdate1.substr(3,2));
    date1.setDate(sdate1.substr(0,2));
    date1.setHours(0);
    date1.setMinutes(0);
    date1.setSeconds(0);
    date1.setMilliseconds(0);
    var d1=date1.getTime()
     
    var date2 = new Date();
    date2.setFullYear(sdate2.substr(6,4));
    date2.setMonth(sdate2.substr(3,2));
    date2.setDate(sdate2.substr(0,2));
    date2.setHours(0);
    date2.setMinutes(0);
    date2.setSeconds(0);
    date2.setMilliseconds(0);
    var d2=date2.getTime()
     
    //(date fin) sdate2 > sdate1 (date de début) afficher un message d'erreur
    if(d1>d2)
    {	
    	alert('Vous avez sélectionnez une date incorrect!!')
    }
    else
    {
    	alert('Correct')
    }
     
    }
    }

  5. #5
    Membre averti Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Points : 400
    Points
    400
    Par défaut
    La fonction ci-dessous à améliorer, mais c'est un exemple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function CheckDate(){
     var a=new Date();			// date courante
     var b=new Date(2029,2,10); // date à tester
     var na=parseInt(a.valueOf(),10);
     var nb=parseInt(b.valueOf(),10);
     if(na > nb){ alert("false");}else{alert("true");}
    }

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     var na=parseInt(a.valueOf(),10);
     var nb=parseInt(b.valueOf(),10);

    Ca sert à quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function CheckDate(){
     var a=new Date();			// date courante
     var b=new Date(2029,2,10); // date à tester
     if(a > b){ alert("false");}else{alert("true");}
    }
    Fonctionne tout aussi bien

  7. #7
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function CheckDate(){
     var a=new Date();			// date courante
     var b=new Date(2029,2,10); // date à tester
     if(a > b){ alert("false");}else{alert("true");}
    }
    Fonctionne tout aussi bien
    Bonsoir,
    le problème c'est que j'ai fais comme ceci mais ça n'a pas fonctionné et je n'arrive pas à connaitre le pourquoi! la seule différence c'est que la date à tester c'est une date inconnue, saisie par l'utilisateur.
    Code : 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
    24
    25
    26
    27
    28
    29
    function verifDate(champ) {
    		dateJour = new Date();
    		var date = champ.value;
    		date = date.replace("-","");
    		var aaaa = date.substring(0,4);
    		var mm = date.substring(4,2);
    		var jj = date.substring(4,2);
    		var dates = new Date(aaaa,mm-1,jj);
     
    		if (dates < dateJour )
    		{
    		 surligne(champ, true);
    	      return false;
     
    		}
    		  else if (dates > dateJour)
    		   {
    		      surligne(champ, false);
    		      return true;
    		   }
    	}
    \\ fonction qui colore le champ incorrecte
    function surligne(champ, erreur)
    {
       if(erreur)
          champ.style.backgroundColor = "#fba";
       else
          champ.style.backgroundColor = "";
    }

  8. #8
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Bonjour,

    Plusieurs problèmes :

    1-
    date = date.replace("-","");. "replace" va remplacer seulement le premier "-" qu'il trouve dans la chaine. Or, comme tu en as deux, ce que tu souhaites faire ne fonctionnera pas. Utilise plutôt une expression régulière comme ceci : date = date.replace(/-/g,"");

    2-
    Une fois ce problème résolu, tu auras bien une date de la forme AAAAMMJJ dans ta variable "date". Ensuite, pour isoler l'année, mois, jour tu t'es trompée dans l'utilisation de substring. En effet, il ne faut pas confondre :

    substring(caractère début, caractère fin (exclu)) et substr (caractère début, longueur). Toi tu as voulu utiliser le fonctionnement de substr mais en se servant de substring Voici donc la bonne version, au choix :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var aaaa = date.substring(0,4);
    var mm = date.substring(4,6);
    var jj = date.substring(6,8);
     
    // OU
     
    var aaaa = date.substr(0,4);
    var mm = date.substr(4,2);
    var jj = date.substr(6,2);

    3-
    dateJour = new Date(); => ceci va te donner la date courante sous ce format : "date jour Thu Oct 25 2012 11:42:12 GMT+0200". Comme tu peux le constater, ceci inclut l'heure également.
    Quand tu construis la date à l'aide du champ de formulaire saisi par l'utilisateur var dates = new Date(aaaa,mm-1,jj);, tu n'inclus pas l'heure. Du coup, si l'utilisateur saisit "2012-10-25", ta variable "dates" contiendra Thu Oct 25 2012 00:00:00 GMT+0200.
    Comme tu peux le constater, ta variable dateJour sera toujours plus grande que ta variable "dates" si l'utilisateur saisit la date d'aujourd'hui. Du coup, ton test sera faux. Il faut donc que dateJour soit construite sous le même format que la date saisie par l'utilisateur.

    4-
    Pense a bien nommer tes variables pour une meilleure relecture plus tard. Par exemple, préfixer chaque variable par son type strSaisie : pour une date de type string. dateSaisie transformation en date, etc ...
    Dernier conseil, pense à faire des "alert", ou mieux des console.log, pour voir ce que contiennent tes variables. Tu aurais décelé le problème facilement.

    Voici un exemple d'un code plus "clean" :
    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
    function verifDate(champ) {
      var dateNow   =  new Date(), 
           strSaisie    =  champ.value,
           dateJour, 
           dateSaisie;
     
      dateJour = new Date(dateNow.getFullYear(), dateNow.getMonth(), dateNow.getDate());
      strSaisie = strSaisie.replace(/-/g,"");
      dateSaisie = new Date(strSaisie.substr(0,4), strSaisie.substr(4,2)-1, strSaisie.substr(6,2));
     
      if (dateSaisie < dateJour ) {
        surligne(champ, true);
      }
      else if (dateSaisie > dateJour) {
        surligne(champ, false);
      }
      else {
        alert('=');
      }
    }
     
    verifDate("2012-10-24");

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

Discussions similaires

  1. Vérifier qu'une date est supérieure à la date actuelle
    Par lamis2009 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 24/05/2010, 13h18
  2. [VBA] Sur une saisie oui/non, stocker la date
    Par PhNou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/02/2008, 10h42
  3. [FTP] Supprimer des fichiers supérieurs à une date
    Par Ouark dans le forum Internet
    Réponses: 4
    Dernier message: 03/09/2007, 09h53
  4. Ne pas saisir une date supérieure à la date du jour
    Par jolemoine dans le forum VBA Access
    Réponses: 12
    Dernier message: 24/05/2007, 23h08
  5. Réponses: 2
    Dernier message: 21/03/2007, 16h06

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