fix: correctly parse years between 0 and 99. fixes #2550 #2551
+43
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In the related issue,
dayjs('0099-11-11').get('year')
gets1999
instead of99
.However, in vanilla
Date
, it parses it correctly:new Date('0099-01-01').getUTCFullYear() === 99
.The reason lies in how we create the underlying
Date
object.In
new Date()
ofparseDate
, when the first parameter is less than 99 and greater than 0, according to MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_components_and_time_zones
When
d[1]
is between 0 and 99, the year is interpreted as1900 + d[1]
, thus we get1999
instead of99
.To fix this, I don't think it is possible to create a
Date
object with the correct year directly, so I add one line to set the year correctly. This is a little ugly, and better ideas welcome.