2015-07-11 53 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时间。 –