Soyez le premier à donner votre avis sur cette source.
Vue 8 163 fois - Téléchargée 253 fois
function date_valid(iText) { iVal = iText.value; regT = new Array( /^([1-9])\D?([1-9])\D?((18|19|20)?\d{2})$/, // ex : 5 5 1800, 1 1 2002 (05-05-1800, 01-01-2002) /^([1-9])\D?(1[0-2])\D?((18|19|20)?\d{2})$/, // ex : 5 11 1800, 1 10 2002 (05-11-1800, 01-10-2002) /^([1-3]0)\D?([1-9])\D?((18|19|20)?\d{2})$/, // ex : 10 3 2001, 30 6 1911 (10-03-2001, 30-06-1911) /^(0[1-9]|[1-3][1-9])\D?([1-9])\D?((18|19|20)?\d{2})$/, // ex : 09 3 2001, 31 6 1911 (09-03-2001, 31-06-1911) /^(0[1-9]|[1-3][0-9])\D?(0[1-9]|1[0-2])\D?((18|19|20)?\d{2})$/ // ex : 10 02 2000, 39 12 1999 (10-02-2000, 39-12-1999) ); if(iVal) { isReg=false; for(i=0; i<regT.length; i++) if( isReg = regT[i].test(iVal) ) { regT[i].exec(iVal); break; } if(isReg) { d = RegExp.$1; m = RegExp.$2; y = RegExp.$3; theDate = new Date(); if(d.length==1) d = '0'+d; if(m.length==1) m = '0'+m; if(y.length==2) y = ( y > String(theDate.getYear()).substr(2,2) ) ? '19'+y : '20'+y; iText.value = d+'-'+m+'-'+y; mT = new Array("janvier","février","mars","avril","mai","juin", "juillet","août","septembre","octobre","novembre","décembre"); reg = /^(0?[1-9]|[1-3][0-9])\D?(0?[1-9]|1[0-2])\D?((18|19|20)\d{2})$/; reg.exec(iText.value); if( parseInt(RegExp.$1) > nbJMonth(RegExp.$3,RegExp.$2) ) { alert('LA DATE ENTRÉE N\'EXISTE PAS...il y a '+nbJMonth(RegExp.$3,RegExp.$2)+' jours pour le mois de '+mT[RegExp.$2-1]+' ('+RegExp.$3+').'); iText.value = '-'+RegExp.$2+'-'+RegExp.$3; iText.focus(); return; } } else { alert('FORMAT DE DATE ERRONÉ...\n\nLes formats valides sont :\n\tjmaa\n\tjmaaaa\n\tjmmaa\n\tjmmaaaa\n\tjjmaa\n\tjjmaaaa\n\tjjmmaa\n\tjjmmaaaa \net où l\'année est supérieure à 1800.\n\n\nREMARQUE(S) :\n1. L\'utilisation de séparateurs (- \/ _ etc...) est facultative.'); iText.focus(); return; } } } function isBissext(theY) { return ( theY % 4 == 0 && (theY % 100 !=0 || theY % 400 ==0) ); } function nbJMonth(theY,theM) { jpm = ['',31,[28,29],31,30,31,30,31,31,30,31,30,31]; theM = parseInt(theM); if(theM==2) return isBissext(theY) ? jpm[theM][1] : jpm[theM][0]; else return jpm[theM]; }
Voici les combinaisons de dates qui ne marchent pas :
du 01-08-XX au 31-08-XX
et du 01-09-XX au 07-09-XX et du 10-09-XX au 30-09-XX
malheureusement, je viens de me rendre contre d'un autre probleme, en saisissant des dates avec les mois d'aout et septembre, le script renvoi un message d'erreur incoherent (ex : pour 01092003, ou 01082018 etc)
ce bug est present sur les precedentes versions et avant la modif du script proposé le 21/03/2003 21:53:10 par jojo51
Y aurait il donc moyen de rendre ce script parfait ?
Merci d'avance en tout cas
courante il suffit de remplacer la portion de code suivante :
( y > String(theDate.getYear()).substr(2,2) ) ? '19'+y : '20'+y;
par ( y > nb_que_vous_voulez ) ? '19'+y :'20'+y;
sinon vous pouvez toujours y incorporer une fonction perso retournant
la bonne année suivant votre propre test...
function dateYear(y)
{return (y > nb_que_vous_voulez) ? '19'+y : '20'+y;}
Merci pour vos commantaires ;-)
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.