Javascript 如何使D3.js使用UTC时间作为x轴,使用矩.js

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(); }

我正在使用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(); }],
    ["%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();