Skip to content

Commit

Permalink
Leap year and general date validation for isDate()
Browse files Browse the repository at this point in the history
  • Loading branch information
ravestack committed Aug 11, 2015
1 parent a08ec14 commit 0cb28f6
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
11 changes: 11 additions & 0 deletions test/validators.js
Original file line number Diff line number Diff line change
Expand Up @@ -852,15 +852,26 @@ describe('Validators', function () {
validator: 'isDate'
, valid: [
'2011-08-04'
, '2011-09-30'
, '04. 08. 2011.'
, '08/04/2011'
, '2011.08.04'
, '4. 8. 2011. GMT'
, '2. 28. 2011. GMT'
, '2. 29. 2008. GMT'
, '2. 29. 1988. GMT'
, '2011-08-04 12:00'
, '2/29/24'
, '2-29-24'
]
, invalid: [
'foo'
, '2011-foo-04'
, '2011-09-31'
, '2. 29. 1987. GMT'
, '2. 29. 2011. GMT'
, '2/29/25'
, '2-29-25'
, 'GMT'
]
});
Expand Down
22 changes: 21 additions & 1 deletion validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,27 @@
};

validator.isDate = function (str) {
return !isNaN(Date.parse(str));
var normalizedDate = new Date((new Date(str)).toUTCString());
var dayOrYear, dayOrYearMatches, day, year;
if (isNaN(Date.parse(normalizedDate))) {
return false;
}
dayOrYearMatches = str.match(/[23]\d(\D|$)/g);
if (!dayOrYearMatches) {
return true;
}
dayOrYear = dayOrYearMatches.map(function(match) {
return match.slice(0,2);
}).join('/');
day = String(normalizedDate.getUTCDate());
year = String(normalizedDate.getFullYear()).slice(-2);
if (dayOrYear === day || dayOrYear === year) {
return true;
} else if ((dayOrYear === (day + '/' + year)) || (dayOrYear === (year + '/' + day))) {
return true;
} else {
return false;
}
};

validator.isAfter = function (str, date) {
Expand Down

0 comments on commit 0cb28f6

Please sign in to comment.