sheetjs icon indicating copy to clipboard operation
sheetjs copied to clipboard

Issue #1300 fix: fuzzydate strict date option regex

Open nandanv2702 opened this issue 2 years ago • 3 comments

Hey! This fix refers to issue #1300

I made changes to two of the files to include regex options to parse dates in the following formats:

  • mm dd yyyy
  • mm dd yy
  • dd mm yyyy
  • dd mm yy

All the aforementioned date formats use the separators . or - or /, e.g.:

  • dd-mm-yy
  • dd.mm.yy
  • dd/mm/yy

This can be activated using the strictDate option in the fuzzydate function which is set to false by default.

Let me know whether this solution is what you were looking for!

nandanv2702 avatar Aug 13 '21 18:08 nandanv2702

ES6 issues aside (we are targeting ES3, so no const or default parameter values or arrow functions) two comments:

  1. the result of the match is not used, so RegExp#test probably should be used. You might also be missing a new RegExp somewhere.

  2. how should the library interpret something ambiguous like 03-02-01 or 01/02/03 ?

SheetJSDev avatar Sep 11 '21 19:09 SheetJSDev

Hey! I'll work on the changes for the first point soon, but as for the second - what do you think of including an option similar to dateNF that allows a user to enter the date format as dd-mm-yy, mm-dd-yy etc.?

Alternatively, if strictDates is set to true, we can use dateNF (or the newly defined similar variable as mentioned above) to match any date values to the regex options defined in this PR here

What do you think?

nandanv2702 avatar Sep 23 '21 00:09 nandanv2702

Just following up on my last comment - after reading #2196 and #1646, I think it might make more sense to make the following changes:

  1. Change strictDates to a string that can be dd-mm, mm-dd, or true
  2. Refactor STRICT_DATE_REGEX to be an Object with the keys dd-mm and `mm-dd with their respective regex values

This can allow for stricter dates while also letting us switch dd-mm to mm-dd internally since the JS Date function only uses mm-dd. In case strictDates is true, we can test it with all STRICT_DATE_REGEX values and return the first match (which will, by nature, be in the mm-dd format).

I'm currently working on these changes, so let me know if this sounds good!

nandanv2702 avatar Sep 30 '21 23:09 nandanv2702