Commentçamarche.net
CodeS-SourceS
Rechercher un code, un tuto, une réponse

Controle validite date

5/5 (1 avis)

Snippet vu 24 629 fois - Téléchargée 14 fois

Contenu du snippet

ci joint un bout de code que j'ai écris et qui peut peut etre vous servir , il permet de vérifier si la zone saisie est une date correcte et si elle est comprise dans un intervalle de jours fournis au départ la date peut etre saisie sous plusieurs format different JJMMAA JJ/MM/AA JJ/MM/AAAA ou JJMMAAAA

LES PARAMETRES A FOURNIR SONT
mdate = this.value
rb = this
i1 et i2 valeur mini et maxi de la date
ex i1 = 30 i2 = 15 la ate saisie doit etre comprise entre J-30 et J+15

si certain reconnaisse un bout de leur code c que je m en suis servi !!!!!

Source / Exemple :


function ValidDate(mdate,rb,i1,i2)
{

//CETTE FONCTION PERMET :
//			CONTROLE LA VALIDITEE DE LA DATE SAISIE
//			LA DATE PEUT ETRE SAISIE SOUS TOUTES FORMES DS L ORDRE JMA
//			ON CONTROLE EGALEMENT LA VALIDITE PAR RAPPORT A UNE FOURCHETTE DE JOUR FOURNIS EN PARRAMETRE
			
// DEFINITION DES VARIABLES
var jjs = 86400000
var datej = new Date();
var dateMaxi = datej.getTime() + (jjs*i2)
var dateMini = datej.getTime() - (jjs*i1)
var dateMaxiTxt = new Date(dateMaxi);
var dateMiniTxt = new Date(dateMini);

var messretour = "La date saisie est incorrect\nLa date doit être saisie dans l'ordre suivant JMA\nelle doit être comprise entre le: "
              + dateMiniTxt.getDate() +'/' + (dateMiniTxt.getMonth()+1)+'/'+dateMiniTxt.getYear() + ' et le '
              + dateMaxiTxt.getDate() +'/' + (dateMaxiTxt.getMonth()+1)+'/'+dateMaxiTxt.getYear()
              
// ON SUPPRIME LES SEPARATEURS DANS LA ZONE SAISIE 
// LA CHAINE RESTANTE DOIT ETRE NUMERIQUE ET DE LONGUEUR EGALE A 6 OU 8 
// --------------------------------------------------------------------
mdate=mdate.replace("/","");
mdate=mdate.replace("/","");
if (mdate.length != 6 && mdate.length != 8)
									{alert(messretour);
									rb.value="";
						 			return (false);
									}

if (IsNumeric(mdate) == false) 
						{alert(messretour);
   	          			rb.value="";
						 return (false);
						}

// ON RECONSTITUE UNE ATE AU FORMAT JJ/MM/AAAA 
// -------------------------------------------  
var jj = mdate.substring(0,2);
var mm = mdate.substring(2,4);
if (mdate.length == 8) {var aaaa = mdate.substring(4,8);}
if (mdate.length == 6) {
							if (mdate.substring(4,6) < '50') {var aaaa = '20' + mdate.substring(4,6);}
							if (mdate.substring(4,6) >= '50') {var aaaa = '19' + mdate.substring(4,6);}
							}
var mdatenew = jj+'/'+mm+'/'+aaaa;

// ON CONTROLE LA COHERENCE DE LA DATE 
// -----------------------------------  

if (isDateValid(mdatenew) == false)
									{
										alert(messretour);
										rb.value="";
										return false;
									}

// ON CONTROLE LA COHERENCE DE LA DATE PAR RAPPORT OU BORNE MINI ET MAXI FOURNIE 
// -----------------------------------------------------------------------------
var dates = new Date(aaaa,mm-1,jj);
var datesaisie =dates.getTime();

if (datesaisie >= dateMaxi || datesaisie <= dateMini)
									{
										alert(messretour);
										rb.value="";
										return false;
									}
rb.value = mdatenew
}

function IsNumeric(x)
{
var checkOK = "0123456789-";
  var checkStr = x;
  var allValid = true;
  var decPoints = 0;
  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[2]),eval(ladate[1])-1,eval(ladate[0]));

   var annee = unedate.getYear();
   if ((Math.abs(annee)+"").length < 4) annee = annee + 1900;
   //return(true);
   return ((unedate.getDate() == eval(ladate[0])) && (unedate.getMonth() == eval(ladate[1])-1) && (annee == eval(ladate[2])))
}

A voir également

Ajouter un commentaire

Commentaires

Votre évaluation

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.