Originariamente inviato da Legnetto
Scusa la richiesta diretta, ma il conrollo data in javascript che ho funziona benissimo(spudoratamente copiato da WillyBit del forum javascript) ma accetta solo date con anno a 4 cifre.....
Non è che ne hai uno già fatto che accetti anche le 2 cifre.
Non posso usare un validator perchè uso dei campi input normali.
Non odiarmi!!!
Ciao
Legnetto
codice:
/*---------------------------------------------------------------------
Questa funzione accetta una variabile stringa e verifica se e una data.
La data deve essere nel formato giorno mese anno. Il giorno e il mese
devono essere di 1 o 2 cifre, l'anno deve essere di 2 o 4 cifre.
Il delimitatore deve essere / o - o .
Restituisce un oggetto con le proprieta:
.isdate = vero o falso
.error = messaggio errore
.year = anno
.month = mese
.day = giorno
---------------------------------------------------------------------*/
function isdate(dateStr) {
var ret = new Object();
ret.isdate = false;
ret.error = "";
ret.year = 0;
ret.month = 0;
ret.day = 0;
// inizio stringa
// 1 o 2 cifre
// / o - o .
// 1 o 2 cifre
// / o - o .
// 4 cifre
// fine stringa
//var datePat = /^(\d{1,2})(\/|-|.)(\d{1,2})(\/|-|.)(\d{4})$/;
var datePat = /^\s*(\d{1,2})(\/|-|\.)(\d{1,2})(\2)(\d{2}|\d{4})\s*$/
//restituisce, allo stesso modo di una matrice, i risultati di una ricerca
//di una stringa utilizzando un oggetto Regular Expression
var matchArray = dateStr.match(datePat);
if (matchArray == null) {
ret.error = "Per favore, introduci la data nei formati gg/mm/aaaa o gg-mm-aaaa o gg.mm.aaaa";
return ret;
}
day = matchArray[1];
month = matchArray[3];
year = matchArray[5];
if(year.length == 2)
if(parseInt(year,10) < 30)
year = parseInt(year,10) + 2000;
else
year = parseInt(year,10) + 1900;
if (month < 1 || month > 12) { // il mese deve essere compreso tra 1 e 12
ret.error = "Il mese deve essere compreso tra 1 e 12.";
return ret;
}
if (day < 1 || day > 31) {//il giorno non puo essere < 1 e > 31
ret.error = "Il giorno deve essere compreso tra 1 e 31";
return ret;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
//i mesi aprile, giugno, settembre, novembre, hanno 30 giorni
ret.error = "Il mese " + month + " non ha 31 giorni!";
return ret;
}
if (month == 2) { // verifica se l'anno e bisestile: febbraio puo avere 29 giorni
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day==29 && !isleap)) {
ret.error = "Febbraio " + year + " non ha " + day + " giorni!";
return ret;
}
}
isDateError = "";
// se sono qui, la data e valida!
ret.isdate = true;
ret.error = "";
ret.year = year;
ret.month = month;
ret.day = day;
return ret;
}
Io lo avevo previsto SOLO per anno di quattro cifre, poi lo hanno voluto per 2
provalo un poco