Javascript 如何使D3.js使用UTC时间作为x轴,使用矩.js
我正在使用D3.js绘制一个可缩放的图表,其中x轴的UTC时间刻度为,例如:Javascript 如何使D3.js使用UTC时间作为x轴,使用矩.js,javascript,d3.js,momentjs,Javascript,D3.js,Momentjs,我正在使用D3.js绘制一个可缩放的图表,其中x轴的UTC时间刻度为,例如: var axisTimeFormat = d3.time.format.utc.multi([ [".%L", function(d) { return d.getMilliseconds(); }], [":%S", function(d) { return d.getSeconds(); }], ["%I:%M", function(d) { return d.getMinutes(); }
var axisTimeFormat = d3.time.format.utc.multi([
[".%L", function(d) { return d.getMilliseconds(); }],
[":%S", function(d) { return d.getSeconds(); }],
["%I:%M", function(d) { return d.getMinutes(); }],
["%I %p", function(d) { return d.getHours(); }],
["%a %d", function(d) { return d.getDay() && d.getDate() != 1; }],
["%b %d", function(d) { return d.getDate() != 1; }],
["%B", function(d) { return d.getMonth(); }],
["%Y", function() { return true; }]
]);
// `minDt` and `maxDt` are Moment.js UTC times:
var x = d3.time.scale.utc()
.domain([minDt, maxDt])
.range([0, width]);
var xAxis = d3.svg.axis().scale(x)
.orient('bottom')
.tickSize(-height)
.tickFormat(axisTimeFormat);
我的数据使用Moment.js UTC时间。这一切都是可行的,但问题是,无论我放大或缩小了多少,刻度始终是“%I%p”格式
我在伦敦,在夏令时,所以在d3.time.format.utc.multi
,d.getHours()
返回1
或13
,而不是0
(这将导致它进入下一个时间格式)或12
这些函数中使用的日期对象似乎不再是UTC。i、 e.如果我在其中一个控制台中执行console.log(d)
,我会得到如下结果:
Tue May 16 2017 01:00:00 GMT+0100 (BST)
如何使这些方法使用我在其他地方使用的UTC日期?您可以在axisTimeFormat定义中使用UTC方法 试着替换
return d.getHours();
与
等等就是这样!非常感谢。我在今天早些时候的时区冒险中注意到了这些方法,然后就把它们忘得一干二净了。如果通过
yourcmomentobject.toDate()
获得了d
,那么就不要调用toDate
。您可以从时刻的getter中获取值,如.hour()
等。用于生成D3刻度的minDt
和maxDt
都是时刻时间。但是d
,在d3.time.format.utc.multi()中的函数中都是标准的JS日期。
return d.getUTCHours();