-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
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
UTC Plugin calculates incorrect results when using diff() in months (starting in v1.8.33) #1021
Comments
Test code const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
dayjs.extend(utc);
/**
* calcDateDiff - Test method that finds the difference between 2 ISO dates using dayjs.
*/
function calcDateDiff({ startDateISO, endDateISO, timeUnits }, utc=false) {
let startDate, endDate;
if (utc) {
startDate = dayjs.utc(startDateISO); // convert to dayjs
endDate = dayjs.utc(endDateISO);
} else {
startDate = dayjs(startDateISO); // convert to dayjs
endDate = dayjs(endDateISO);
}
const dateDiff = endDate.diff(startDate, timeUnits);
return dateDiff;
}
// Create test data
const info = {
endDateISO: '2019-12-15T11:00:00',
timeUnits: 'month',
};
const data = [];
let startDateISO;
// Add 12 start dates to our test data, going further into the past so we can compare results.
for (let i=12; i >=1; i--) {
const leadingZero = i < 10 ? '0' : '';
startDateISO = `2019-${leadingZero}${i}-15T11:00:00`;
data.push({
...info,
startDateISO,
});
}
// Run the test and ouput results to the console
for (const d of data) {
const dateDiff = calcDateDiff(d);
const dateDiffUTC = calcDateDiff(d, true);
console.log('Start date:', d.startDateISO, 'End date:', d.endDateISO, 'diff', dateDiff, 'diff-UTC', dateDiffUTC);
} Test results
|
Seems ok here ? https://runkit.com/embed/7xucw8zhictx |
Hmm, yes that runkit runs ok for me too. That's interesting 🤔 I see the node version is Would you please try running this fiddle? It gives me incorrect results in both Firefox and Chrome. |
Well this is odd. Clearly there is some difference here, so I'm trying to figure out what that is. I asked a few otheres to run this test and here are some additional results for reference: User 1: Windows, Chrome, UTC-04:00 (DST, yes). Result: Fail. My initial thought was this could have something to do with local time zone, but now I'm curious if it's related to Daylight Savings Time observance. I think I'll try to write some tests that parse the date in different timezones to see if I can find a stronger correlation. One question: how does |
You can check the month diff function here https://github.com/iamkun/dayjs/blob/dev/src/utils.js#L17 |
@KosnIre It seems that this difference is caused by Daylight Savings Time observance. |
## [1.9.5](v1.9.4...v1.9.5) (2020-11-05) ### Bug Fixes * customParseFormat plugin supports parsing localizedFormats ([#1110](#1110)) ([402b603](402b603)) * fix customParseFormat plugin parse meridiem bug ([#1169](#1169)) ([9e8f8d9](9e8f8d9)), closes [#1168](#1168) * fix devHelper error in umd bundle in browser ([#1165](#1165)) ([d11b5ee](d11b5ee)) * fix utc plugin diff bug in DST ([#1171](#1171)) ([f8da3fe](f8da3fe)), closes [#1097](#1097) [#1021](#1021) * isoWeek plugin type ([#1177](#1177)) ([c3d0436](c3d0436)) * update localeData plugin to support meridiem ([#1174](#1174)) ([fdb09e4](fdb09e4)), closes [#1172](#1172) * update timezone plugin parse Date instance / timestamp logic & remove useless test ([#1183](#1183)) ([a7f858b](a7f858b))
🎉 This issue has been resolved in version 1.9.5 🎉 The release is available on: Your semantic-release bot 📦🚀 |
## [1.9.5](iamkun/dayjs@v1.9.4...v1.9.5) (2020-11-05) ### Bug Fixes * customParseFormat plugin supports parsing localizedFormats ([#1110](iamkun/dayjs#1110)) ([402b603](iamkun/dayjs@402b603)) * fix customParseFormat plugin parse meridiem bug ([#1169](iamkun/dayjs#1169)) ([9e8f8d9](iamkun/dayjs@9e8f8d9)), closes [#1168](iamkun/dayjs#1168) * fix devHelper error in umd bundle in browser ([#1165](iamkun/dayjs#1165)) ([d11b5ee](iamkun/dayjs@d11b5ee)) * fix utc plugin diff bug in DST ([#1171](iamkun/dayjs#1171)) ([f8da3fe](iamkun/dayjs@f8da3fe)), closes [#1097](iamkun/dayjs#1097) [#1021](iamkun/dayjs#1021) * isoWeek plugin type ([#1177](iamkun/dayjs#1177)) ([c3d0436](iamkun/dayjs@c3d0436)) * update localeData plugin to support meridiem ([#1174](iamkun/dayjs#1174)) ([fdb09e4](iamkun/dayjs@fdb09e4)), closes [#1172](iamkun/dayjs#1172) * update timezone plugin parse Date instance / timestamp logic & remove useless test ([#1183](iamkun/dayjs#1183)) ([a7f858b](iamkun/dayjs@a7f858b))
## [1.9.5](iamkun/dayjs@v1.9.4...v1.9.5) (2020-11-05) ### Bug Fixes * customParseFormat plugin supports parsing localizedFormats ([#1110](iamkun/dayjs#1110)) ([402b603](iamkun/dayjs@402b603)) * fix customParseFormat plugin parse meridiem bug ([#1169](iamkun/dayjs#1169)) ([9e8f8d9](iamkun/dayjs@9e8f8d9)), closes [#1168](iamkun/dayjs#1168) * fix devHelper error in umd bundle in browser ([#1165](iamkun/dayjs#1165)) ([d11b5ee](iamkun/dayjs@d11b5ee)) * fix utc plugin diff bug in DST ([#1171](iamkun/dayjs#1171)) ([f8da3fe](iamkun/dayjs@f8da3fe)), closes [#1097](iamkun/dayjs#1097) [#1021](iamkun/dayjs#1021) * isoWeek plugin type ([#1177](iamkun/dayjs#1177)) ([c3d0436](iamkun/dayjs@c3d0436)) * update localeData plugin to support meridiem ([#1174](iamkun/dayjs#1174)) ([fdb09e4](iamkun/dayjs@fdb09e4)), closes [#1172](iamkun/dayjs#1172) * update timezone plugin parse Date instance / timestamp logic & remove useless test ([#1183](iamkun/dayjs#1183)) ([a7f858b](iamkun/dayjs@a7f858b))
## [1.9.5](iamkun/dayjs@v1.9.4...v1.9.5) (2020-11-05) ### Bug Fixes * customParseFormat plugin supports parsing localizedFormats ([#1110](iamkun/dayjs#1110)) ([402b603](iamkun/dayjs@402b603)) * fix customParseFormat plugin parse meridiem bug ([#1169](iamkun/dayjs#1169)) ([9e8f8d9](iamkun/dayjs@9e8f8d9)), closes [#1168](iamkun/dayjs#1168) * fix devHelper error in umd bundle in browser ([#1165](iamkun/dayjs#1165)) ([d11b5ee](iamkun/dayjs@d11b5ee)) * fix utc plugin diff bug in DST ([#1171](iamkun/dayjs#1171)) ([f8da3fe](iamkun/dayjs@f8da3fe)), closes [#1097](iamkun/dayjs#1097) [#1021](iamkun/dayjs#1021) * isoWeek plugin type ([#1177](iamkun/dayjs#1177)) ([c3d0436](iamkun/dayjs@c3d0436)) * update localeData plugin to support meridiem ([#1174](iamkun/dayjs#1174)) ([fdb09e4](iamkun/dayjs@fdb09e4)), closes [#1172](iamkun/dayjs#1172) * update timezone plugin parse Date instance / timestamp logic & remove useless test ([#1183](iamkun/dayjs#1183)) ([a7f858b](iamkun/dayjs@a7f858b))
Describe the bug
Using the
diff()
method, in months, returns incorrect results when using the UTC plugin starting inv1.8.33
. It is also returning different results when using the plugin vs without.The result appears to be off by one month in some cases.
Expected result: The difference between May and December should be calculated as 7 months.
Actual result: The difference between May and December is calculated as 6 months.
Information
The text was updated successfully, but these errors were encountered: