From 59d72d6bb3ab23a866f566906a87ac00e44613dd Mon Sep 17 00:00:00 2001 From: alexcjohnson Date: Thu, 26 Jul 2018 16:36:10 +0100 Subject: [PATCH] fix #1363 - honor tenths of milliseconds in old numeric date data --- src/plots/cartesian/set_convert.js | 9 ++++++++- test/jasmine/tests/axes_test.js | 12 ++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/plots/cartesian/set_convert.js b/src/plots/cartesian/set_convert.js index d3471547328..6accda70654 100644 --- a/src/plots/cartesian/set_convert.js +++ b/src/plots/cartesian/set_convert.js @@ -92,7 +92,14 @@ module.exports = function setConvert(ax, fullLayout) { // as (local) ms if that fails. var ms = dateTime2ms(v, calendar || ax.calendar); if(ms === BADNUM) { - if(isNumeric(v)) ms = dateTime2ms(new Date(+v)); + if(isNumeric(v)) { + v = +v; + // keep track of tenths of ms, that `new Date` will drop + // same logic as in Lib.ms2DateTime + var msecTenths = Math.floor(Lib.mod(v + 0.05, 1) * 10); + var msRounded = Math.round(v - msecTenths / 10); + ms = dateTime2ms(new Date(msRounded)) + msecTenths / 10; + } else return BADNUM; } return ms; diff --git a/test/jasmine/tests/axes_test.js b/test/jasmine/tests/axes_test.js index 7b6352a605e..fa5fd0b2dd4 100644 --- a/test/jasmine/tests/axes_test.js +++ b/test/jasmine/tests/axes_test.js @@ -2510,10 +2510,18 @@ describe('Test axes', function() { }); it('- date case', function() { + var msLocal = new Date(2000, 0, 1).getTime(); + var msUTC = 946684800000; var out = _makeCalcdata({ - x: ['2000-01-01', NaN, null, new Date(2000, 0, 1).getTime()], + x: ['2000-01-01', NaN, null, msLocal], }, 'x', 'date'); - expect(out).toEqual([946684800000, BADNUM, BADNUM, 946684800000]); + expect(out).toEqual([msUTC, BADNUM, BADNUM, msUTC]); + + // fractional milliseconds - should round to 0.1 msec + var out2 = _makeCalcdata({ + x: [msLocal, msLocal + 0.04, msLocal + 0.06, msLocal + 0.5, msLocal + 0.94, msLocal + 0.96, msLocal + 1] + }, 'x', 'date'); + expect(out2).toEqual([msUTC, msUTC, msUTC + 0.1, msUTC + 0.5, msUTC + 0.9, msUTC + 1, msUTC + 1]); }); it('- category case', function() {