Skip to content

Commit e8f5d86

Browse files
committed
Fix d3#720: d3.time.dayOfYear floating-point error.
1 parent 544addb commit e8f5d86

4 files changed

Lines changed: 25 additions & 3 deletions

File tree

d3.v2.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9174,7 +9174,7 @@ d3.time.days.utc = d3.time.day.utc.range;
91749174

91759175
d3.time.dayOfYear = function(date) {
91769176
var year = d3.time.year(date);
9177-
return Math.floor((date - year) / 864e5 - (date.getTimezoneOffset() - year.getTimezoneOffset()) / 1440);
9177+
return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);
91789178
};
91799179
d3_time_weekdays.forEach(function(day, i) {
91809180
day = day.toLowerCase();

d3.v2.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/time/day.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ d3.time.days.utc = d3.time.day.utc.range;
1111

1212
d3.time.dayOfYear = function(date) {
1313
var year = d3.time.year(date);
14-
return Math.floor((date - year) / 864e5 - (date.getTimezoneOffset() - year.getTimezoneOffset()) / 1440);
14+
return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);
1515
};

test/time/dayOfYear-test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
require("../env");
2+
3+
var vows = require("vows"),
4+
assert = require("assert"),
5+
time = require("./time"),
6+
local = time.local,
7+
utc = time.utc;
8+
9+
var suite = vows.describe("d3.time.dayOfYear");
10+
11+
suite.addBatch({
12+
"dayOfYear": {
13+
topic: function() {
14+
return d3.time.dayOfYear;
15+
},
16+
"no floating-point rounding error": time.zone("America/Santiago", function(dayOfYear) {
17+
assert.equal(dayOfYear(new Date(2011, 4, 9)), 128);
18+
})
19+
}
20+
});
21+
22+
suite.export(module);

0 commit comments

Comments
 (0)