Skip to content

Commit 2c4aede

Browse files
authored
fix(isDate): Timezone Offset Fix (#2257)
* Timezone Offset Fix & Parsing with Leading Zeros * `isDate` Timezone Mock Test, Support for NodeJS <8 * `isDate` Unit Test Resiliency Improvement
1 parent f074abd commit 2c4aede

3 files changed

Lines changed: 26 additions & 1 deletion

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"rimraf": "^3.0.0",
5252
"rollup": "^0.47.0",
5353
"rollup-plugin-babel": "^4.0.1",
54+
"timezone-mock": "^1.3.6",
5455
"uglify-js": "^3.0.19"
5556
},
5657
"scripts": {

src/lib/isDate.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,19 @@ export default function isDate(input, options) {
6565
}
6666
}
6767

68-
return new Date(`${fullYear}-${dateObj.m}-${dateObj.d}`).getDate() === +dateObj.d;
68+
let month = dateObj.m;
69+
70+
if (dateObj.m.length === 1) {
71+
month = `0${dateObj.m}`;
72+
}
73+
74+
let day = dateObj.d;
75+
76+
if (dateObj.d.length === 1) {
77+
day = `0${dateObj.d}`;
78+
}
79+
80+
return new Date(`${fullYear}-${month}-${day}T00:00:00.000Z`).getUTCDate() === +dateObj.d;
6981
}
7082

7183
if (!options.strictMode) {

test/validators.test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import assert from 'assert';
22
import fs from 'fs';
3+
import timezone_mock from 'timezone-mock';
34
import { format } from 'util';
45
import vm from 'vm';
56
import validator from '../src/index';
@@ -13054,6 +13055,17 @@ describe('Validators', () => {
1305413055
'29.02.2020',
1305513056
],
1305613057
});
13058+
// emulating Pacific time zone offset & time
13059+
// which could potentially result in UTC conversion issues
13060+
timezone_mock.register('US/Pacific');
13061+
test({
13062+
validator: 'isDate',
13063+
valid: [
13064+
new Date(2016, 2, 29),
13065+
'2017-08-04',
13066+
],
13067+
});
13068+
timezone_mock.unregister();
1305713069
});
1305813070
it('should validate time', () => {
1305913071
test({

0 commit comments

Comments
 (0)