Skip to content

Commit ea376d7

Browse files
benmccannsimonbrunel
authored andcommitted
Fix determineUnitForFormatting floating point error (chartjs#6259)
1 parent 9117b98 commit ea376d7

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

src/adapters/adapter.moment.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ adapters._date.override(typeof moment === 'function' ? {
4343
},
4444

4545
diff: function(max, min, unit) {
46-
return moment.duration(moment(max).diff(moment(min))).as(unit);
46+
return moment(max).diff(moment(min), unit);
4747
},
4848

4949
startOf: function(time, unit, weekday) {

src/scales/scale.time.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ function determineUnitForFormatting(scale, ticks, minUnit, min, max) {
300300

301301
for (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {
302302
unit = UNITS[i];
303-
if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= ticks.length) {
303+
if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= ticks.length - 1) {
304304
return unit;
305305
}
306306
}

test/specs/scale.time.tests.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,41 @@ describe('Time scale tests', function() {
315315
expect(ticks).toEqual(['Jan 1', 'Jan 2', 'Jan 3']);
316316
});
317317

318+
it('should correctly determine the unit', function() {
319+
var date = moment('Jan 01 1990', 'MMM DD YYYY');
320+
var data = [];
321+
for (var i = 0; i < 60; i++) {
322+
data.push({x: date.valueOf(), y: Math.random()});
323+
date = date.clone().add(1, 'month');
324+
}
325+
326+
var chart = window.acquireChart({
327+
type: 'line',
328+
data: {
329+
datasets: [{
330+
xAxisID: 'xScale0',
331+
data: data
332+
}],
333+
},
334+
options: {
335+
scales: {
336+
xAxes: [{
337+
id: 'xScale0',
338+
type: 'time',
339+
ticks: {
340+
source: 'data',
341+
autoSkip: true
342+
}
343+
}],
344+
}
345+
}
346+
});
347+
348+
var scale = chart.scales.xScale0;
349+
350+
expect(scale._unit).toEqual('month');
351+
});
352+
318353
it('should build ticks based on the appropriate label capacity', function() {
319354
var mockData = {
320355
labels: [

0 commit comments

Comments
 (0)