Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
72
rated 0 times [  77] [ 5]  / answers: 1 / hits: 23223  / 13 Years ago, wed, september 28, 2011, 12:00:00

Given a string str, how could I check if it is in the dd/mm/yyyy format and contains a legal date ?



Some examples:



bla bla      // false
14/09/2011 // true
09/14/2011 // false
14/9/2011 // false
1/09/2011 // false
14/09/11 // false
14.09.2011 // false
14/00/2011 // false
29/02/2011 // false
14/09/9999 // true

More From » jquery

 Answers
66

Edit: exact solution below



You could do something like this, but with a more accurate algorithm for day validation:



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/



Date validation alg.: http://www.eee.hiflyers.co.uk/ProgPrac/DateValidation-algorithm.pdf



Exact solution: function that returns a parsed date or null, depending exactly on your requirements.



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 case you need the function to return true/false and for a yyyy/mm/dd format



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 ;
}

[#89877] Tuesday, September 27, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
turnerf

Total Points: 620
Total Questions: 101
Total Answers: 109

Location: French Polynesia
Member since Tue, Jul 7, 2020
4 Years ago
turnerf questions
;