Skip to content

Commit bf5b2dc

Browse files
natesilvachriso
authored andcommittedNov 13, 2018
fix(isISO8601): strict mode now works with other JS engines (#932)
1 parent f67111d commit bf5b2dc

File tree

5 files changed

+22
-14
lines changed

5 files changed

+22
-14
lines changed
 

‎lib/isISO8601.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ var isValidDate = function isValidDate(str) {
3232
var match = str.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number);
3333
var year = match[1];
3434
var month = match[2];
35-
var day = match[3]; // create a date object and compare
35+
var day = match[3];
36+
var monthString = month ? "0".concat(month).slice(-2) : month;
37+
var dayString = day ? "0".concat(day).slice(-2) : day; // create a date object and compare
3638

37-
var d = new Date("".concat(year, "-").concat(month || 1, "-").concat(day || 1));
38-
if (isNaN(d.getFullYear())) return false;
39+
var d = new Date("".concat(year, "-").concat(monthString || '01', "-").concat(dayString || '01'));
40+
if (isNaN(d.getUTCFullYear())) return false;
3941

4042
if (month && day) {
41-
return d.getFullYear() === year && d.getMonth() + 1 === month && d.getDate() === day;
43+
return d.getUTCFullYear() === year && d.getUTCMonth() + 1 === month && d.getUTCDate() === day;
4244
}
4345

4446
return true;

‎src/lib/isISO8601.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@ const isValidDate = (str) => {
2222
const year = match[1];
2323
const month = match[2];
2424
const day = match[3];
25+
const monthString = month ? `0${month}`.slice(-2) : month;
26+
const dayString = day ? `0${day}`.slice(-2) : day;
27+
2528
// create a date object and compare
26-
const d = new Date(`${year}-${month || 1}-${day || 1}`);
27-
if (isNaN(d.getFullYear())) return false;
29+
const d = new Date(`${year}-${monthString || '01'}-${dayString || '01'}`);
30+
if (isNaN(d.getUTCFullYear())) return false;
2831
if (month && day) {
29-
return d.getFullYear() === year
30-
&& (d.getMonth() + 1) === month
31-
&& d.getDate() === day;
32+
return d.getUTCFullYear() === year
33+
&& (d.getUTCMonth() + 1) === month
34+
&& d.getUTCDate() === day;
3235
}
3336
return true;
3437
};

‎test/validators.js

+1
Original file line numberDiff line numberDiff line change
@@ -5636,6 +5636,7 @@ describe('Validators', () => {
56365636
'2010-02-18T16,2283',
56375637
'2009-05-19 143922.500',
56385638
'2009-05-19 1439,55',
5639+
'2009-10-10',
56395640
];
56405641

56415642
const invalidISO8601 = [

‎validator.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -1575,13 +1575,15 @@ var isValidDate = function isValidDate(str) {
15751575
var match = str.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number);
15761576
var year = match[1];
15771577
var month = match[2];
1578-
var day = match[3]; // create a date object and compare
1578+
var day = match[3];
1579+
var monthString = month ? "0".concat(month).slice(-2) : month;
1580+
var dayString = day ? "0".concat(day).slice(-2) : day; // create a date object and compare
15791581

1580-
var d = new Date("".concat(year, "-").concat(month || 1, "-").concat(day || 1));
1581-
if (isNaN(d.getFullYear())) return false;
1582+
var d = new Date("".concat(year, "-").concat(monthString || '01', "-").concat(dayString || '01'));
1583+
if (isNaN(d.getUTCFullYear())) return false;
15821584

15831585
if (month && day) {
1584-
return d.getFullYear() === year && d.getMonth() + 1 === month && d.getDate() === day;
1586+
return d.getUTCFullYear() === year && d.getUTCMonth() + 1 === month && d.getUTCDate() === day;
15851587
}
15861588

15871589
return true;

‎validator.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)
Please sign in to comment.