-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
feat: add new isDate() validator #1270
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
2f76d92
5583076
656cc97
47d3edc
6cd63d9
f82011f
4a8f8db
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
export default function isDate(input) { | ||
if (typeof input === 'string') { | ||
return isFinite(Date.parse(input)); | ||
} | ||
|
||
return Object.prototype.toString.call(input) === '[object Date]' && isFinite(input); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
"use strict"; | ||
|
||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = isDate; | ||
|
||
function isDate(input) { | ||
if (typeof input === 'string') { | ||
return isFinite(Date.parse(input)); | ||
} | ||
|
||
return Object.prototype.toString.call(input) === '[object Date]' && isFinite(input); | ||
} | ||
|
||
module.exports = exports.default; | ||
module.exports.default = exports.default; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
export default function isDate(input) { | ||
if (typeof input === 'string') { | ||
return isFinite(Date.parse(input)); | ||
} | ||
return Object.prototype.toString.call(input) === '[object Date]' && isFinite(input); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What this last call for? The assumption is that input will always be a string. You need to call |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8025,4 +8025,34 @@ describe('Validators', () => { | |
], | ||
}); | ||
}); | ||
|
||
it('should validate date', () => { | ||
test({ | ||
validator: 'isDate', | ||
valid: [ | ||
new Date(), | ||
new Date([2014, 2, 15]), | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This means we allow users to send created dates using the |
||
new Date('2014-03-15'), | ||
'2002-07-15', | ||
'2002/07/15', | ||
'07/15/2002', | ||
'07-15-2002', | ||
'2015-07-15T07:00:00+0000', | ||
], | ||
invalid: [ | ||
'', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Try add the following test cases:
I presume all those will pass as true (or fail as false). We will need to handle these cases. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nice catch! a simple validation would be > new Date('2020-02-30').getUTCDate()
1
> new Date('2019-02-29').getUTCDate()
1
> new Date('2020-02-29').getUTCDate()
29 we can compare it with the date supplied
we can do that! my bad
any better way ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd not thought of that way, I think I like it! 👍 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. hmm looks like there are many edge cases to be considered in this case, what if a user supplies MM-DD-YYYY we need to keep things simple and general any suggestion? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure, for now let's just support those that are supported by However, I noticed something else, look at this?
Perhaps this are some of the intricacies that led to deprecating the first What if we allowed the user to supply the format from a list of predefined formats?
Then transform this to a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. check out the fiddle https://jsfiddle.net/hvrwp07e/1/ I have done some tweaking, I have some stuff to do so right now I don't have time to think about edge cases feel free to introduce some edge case or enhance the code let me know if you are aware of any edge cases There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Looking forward to that we can do more addition on edge cases in the future and update the readme accordingly. |
||
'1000033', | ||
'foo', | ||
'15/07/2015', // DD-MM-YYYY invalid | ||
'15-07-2015', // DD-MM-YYYY invalid | ||
new Date('not a valid date'), | ||
{ toString() { return '[object Date]'; } }, | ||
null, | ||
undefined, | ||
42, | ||
[2002, 7, 15], | ||
{ year: 2002, month: 7, day: 15 }, | ||
], | ||
}); | ||
}); | ||
}); |
Large diffs are not rendered by default.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove this file from the diff since it's unrelated to the PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this was auto-generated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just remove it before committing. This is because of the difference in the build system.