Edit: soluzione esatta di seguito
Si potrebbe fare qualcosa di simile, ma con un algoritmo più preciso per la convalida del giorno:
function testDate(str) {
var t = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
if(t === null)
return false;
var d = +t[1], m = +t[2], y = +t[3];
// Below should be a more acurate algorithm
if(m >= 1 && m <= 12 && d >= 1 && d <= 31) {
return true;
}
return false;
}
http://jsfiddle.net/aMWtj/
convalida Data ALG .: http://www.eee.hiflyers.co.uk/ProgPrac/DateValidation-algorithm.pdf
soluzione esatta: funzione che restituisce una data o nulla analizzata, a seconda delle vostre esigenze esattamente.
function parseDate(str) {
var t = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
if(t !== null){
var d = +t[1], m = +t[2], y = +t[3];
var date = new Date(y, m - 1, d);
if(date.getFullYear() === y && date.getMonth() === m - 1) {
return date;
}
}
return null;
}
http://jsfiddle.net/aMWtj/2/
In caso di necessità la funzione per restituire true/false e per un formato gg aaaa/mm/
function IsValidDate(pText) {
var isValid = false ;
var t = pText.match(/^(\d{4})\/(\d{2})\/(\d{2})$/);
if (t !== null) {
var y = +t[1], m = +t[2], d = +t[3];
var date = new Date(y, m - 1, d);
isValid = (date.getFullYear() === y && date.getMonth() === m - 1) ;
}
return isValid ;
}
fonte
2011-09-28 12:28:24
In genere è meglio convertire le stringhe in numeri con [Unario plus operator] (https://developer.mozilla.org/en/JavaScript/Reference/Operators/Arithmetic_Operators#.2B_ (Unary_Plus)) piuttosto che 'parseInt' . I.e, 'd = + t [1]'. Evita problemi come quello in cui hai dimenticato di includere la radice nel calcolo del giorno (particolarmente problematico quando sappiamo che il giorno potrebbe avere zeri iniziali). – nnnnnn
hmm .. buon punto :) –