Skip to content

Commit 28bc3e9

Browse files
authored
Merge pull request #2847 from plotly/fractional-ms-fix
fix #1363 - honor tenths of milliseconds in old numeric date data
2 parents 1ecef45 + 59d72d6 commit 28bc3e9

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/plots/cartesian/set_convert.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,14 @@ module.exports = function setConvert(ax, fullLayout) {
9292
// as (local) ms if that fails.
9393
var ms = dateTime2ms(v, calendar || ax.calendar);
9494
if(ms === BADNUM) {
95-
if(isNumeric(v)) ms = dateTime2ms(new Date(+v));
95+
if(isNumeric(v)) {
96+
v = +v;
97+
// keep track of tenths of ms, that `new Date` will drop
98+
// same logic as in Lib.ms2DateTime
99+
var msecTenths = Math.floor(Lib.mod(v + 0.05, 1) * 10);
100+
var msRounded = Math.round(v - msecTenths / 10);
101+
ms = dateTime2ms(new Date(msRounded)) + msecTenths / 10;
102+
}
96103
else return BADNUM;
97104
}
98105
return ms;

test/jasmine/tests/axes_test.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -2510,10 +2510,18 @@ describe('Test axes', function() {
25102510
});
25112511

25122512
it('- date case', function() {
2513+
var msLocal = new Date(2000, 0, 1).getTime();
2514+
var msUTC = 946684800000;
25132515
var out = _makeCalcdata({
2514-
x: ['2000-01-01', NaN, null, new Date(2000, 0, 1).getTime()],
2516+
x: ['2000-01-01', NaN, null, msLocal],
25152517
}, 'x', 'date');
2516-
expect(out).toEqual([946684800000, BADNUM, BADNUM, 946684800000]);
2518+
expect(out).toEqual([msUTC, BADNUM, BADNUM, msUTC]);
2519+
2520+
// fractional milliseconds - should round to 0.1 msec
2521+
var out2 = _makeCalcdata({
2522+
x: [msLocal, msLocal + 0.04, msLocal + 0.06, msLocal + 0.5, msLocal + 0.94, msLocal + 0.96, msLocal + 1]
2523+
}, 'x', 'date');
2524+
expect(out2).toEqual([msUTC, msUTC, msUTC + 0.1, msUTC + 0.5, msUTC + 0.9, msUTC + 1, msUTC + 1]);
25172525
});
25182526

25192527
it('- category case', function() {

0 commit comments

Comments
 (0)