Parsing de Date, expression régulière
Bonjour,
j'ai un formulaire dans lequel il faut entrer une date, selon plusieurs formats, comme yyyy, MM/yyyy ou dd/MM/yyyy.
Il se trouve que dans le cas de la date complète, j'ai un problème que je n'arrive pas à comprendre :
lorsque j'écris : '18/07/2008', ça marche bien.
En revanche : '18/09/2008' ou '18/08/2006' ne marchent pas bien du tout.
Pourquoi ça ne marche pas pour le mois d'aout et de septembre (quelle que soit l'année et le jour) ?
Voici mon code :
Code:
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
|
function ajouterVideo(){
if(!isDate($F('dateVideo'))&&($F('dateVideo')!='')){
alert(msgErrorBadDate);
return;
}
}
function isDate(sDate){
var sSeparator = '/';
if(!sDate.match("(^(([0-2][0-9])|30|31)/((0[1-9])|(1[0-2]))/((19)|(20))[0-9]{2}$)|(^((19)|(20))[0-9]{2}$)|(^((0[1-9])|(1[0-2]))/((19)|(20))[0-9]{2}$)")){
return false;
}
if(sDate.match("(^(([0-2][0-9])|30|31)/((0[1-9])|(1[0-2]))/((19)|(20))[0-9]{2}$)")){
var arDate = sDate.split(sSeparator);
var iDay = parseInt(arDate[0]);
var iMonth = parseInt(arDate[1]);
var iYear = parseInt(arDate[2]);
alert(arDate);
alert(iDay);
alert(iMonth);
alert(iYear);
var arDayPerMonth = [31,(isLeapYear(iYear))?29:28,31,30,31,30,31,31,30,31,30,31];
if(!arDayPerMonth[iMonth-1]) return false;
return (iDay <= arDayPerMonth[iMonth-1] && iDay > 0);
}
else return true;
}
function isLeapYear(iYear){
return ((iYear%4==0 && iYear%100!=0) || iYear%400==0);
} |
Le problème se situe selon moi au niveau de la fonction isDate(), lors du parsing de arDate : quand je rentre '18/09/2008', par exemple, alert(arDate) m'affiche bien '18,9,2008' mais alert(iMonth) m'affiche '0'.
Pourquoi ?
Merci
les joies et les peines du parseInt ^^
Un grand classique ;)
(mais aucune disgrâce pour toi on est tous tombés dedans une fois :aie:)
ajoute un second param à tes parseInt, avec une valeur de 10, pour lui donner la bonne base de référence (sinon quand la chaine à parser commence par un "0" tu tombes sur de l'octal par défaut... or en octal, les "8" et "9" >>> il en veut pas :aie:)