2015-07-11 52 views
0

我得到時間軸上的問題,所以我在網絡上搜索,我看到有關於該教程/爲例同樣的問題之間的一些像素的目瞪口呆網絡:(d3.js:時間尺度和數據:蜱和數據

在此小提琴http://jsfiddle.net/lampalork/dm6ff3ua/(這只是一個個例的叉找到小提琴)

var xAxis = d3.svg.axis() 
.scale(x) 
.orient('bottom') 
.ticks(d3.time.days, 1) 
.tickFormat(d3.time.format('%a %d')) 
.tickSize(5) 
.tickPadding(8); 

    svg.selectAll('.chart') 
    .data(data) 
    .enter().append('rect') 
    .attr('class', 'bar') 
    .attr('x', function(d) { return x(new Date(d.date)); }) 

你可以看到這個問題,如果你看一下時間軸和第一條形圖中,您可以看到3-4像素的哈欠,我得到了我的工作,同樣的問題,我看到網上的其他爲例這個問題。任何想法?謝謝

回答

2

這條線:

.attr('x', function(d) { return x(new Date(d.date)); }) 

被創建與UTC時區的時間對象。從Mozilla:在假定的時區

差異

鑑於「2014年3月7日」的日期字符串,解析()假定本地時間 區,但給出的ISO格式,如「2014- 03-07「,它將假設UTC時區爲 。因此使用這些字符串 生成的日期對象將表示不同時刻,除非系統設置爲UTC的本地時區爲 。這意味着出現 等效兩個日期字符串可能導致取決於格式正被轉換的字符串的 兩個不同的值(此行爲在 改變的ECMAScript編6,使得兩者都將作爲本地被處理部件)。

d3雖然使用本地時區繪製蜱。

而是盡一切D3和使用方式d3.time.format。在我的時區,這裏的區別:

new Date("2012-03-20") 
> Mon Mar 19 2012 20:00:00 GMT-0400 (Eastern Daylight Time) 
d3.time.format('%Y-%m-%d').parse("2012-03-20") 
> Tue Mar 20 2012 00:00:00 GMT-0400 (Eastern Daylight Time) 

更新fiddle

+0

輝煌,這纔是真正的解決方案。 – Gabriel

+0

謝謝,我會搜索一個loooooonnnnnnnngggggggg時間。 –