d3 x轴不是从00:00开始,而是从02:00开始

时间:2018-12-05 11:53:36

标签: javascript d3.js

我实际上坐在GMT + 2上。 D3版本:3.5.17

我拥有的第一个日期对象如下:2018-09-13T00:00:00.000Z

我拥有的最后一个日期对象如下:2018-09-13T23:00:00.000Z

const xmin = '2018-09-13T00:00:00.000Z';
const xmax = '2018-09-13T23:00:00.000Z';
d3.time.scale().nice()
    .range([0, options.width])
    .domain([new Date(xmin), new Date(xmax)]); 

我希望显示给我的图的x轴如下:

00 ..... 23

我正在得到:

02 ..... 01

我不想考虑我的GMT + 2。我希望它显示UTC。我了解这是Javascript Date对象的问题。我绝对不知道如何使用D3修复此问题。该文档太可怕了。

我尝试放入ISO字符串,但结果为NaN:

const scale = d3.time.scale().nice();



const _xmin = '2018-09-13T00:00:00.000Z';
const _xmax = '2018-09-13T23:00:00.000Z';
scale
    .range([0, options.width])
    .domain([_xmin, _xmax]);

const _response = scale(_xmin);
console.log({
    _response
});



const __xmin = new Date('2018-09-13T00:00:00.000Z');
const __xmax = new Date('2018-09-13T23:00:00.000Z');
scale
    .range([0, options.width])
    .domain([__xmin, __xmax]);

const __response = scale(__xmin);
console.log({
    __response
});

控制台:

{_response: NaN} // <--- not working
{__response: 0} // <--- working

3 个答案:

答案 0 :(得分:0)

您可以使用它来获取UTC格式。

const xminutcDate = (new Date('2018-09-13T00:00:00.000Z')).toUTCString();
const xmaxutcDate = (new Date('2018-09-13T23:00:00.000Z')).toUTCString();

console.log(([xminutcDate, xmaxutcDate]));

答案 1 :(得分:0)

您可以尝试设置UTC时间刻度,如下所示:

d3.time.scale.utc().nice()
    .range([0, options.width])
    .domain([new Date(xmin), new Date(xmax)]); 

答案 2 :(得分:0)

好吧,这显然起作用了,但我不知道为什么:

const parseDate = d3.time.format("%Y-%m-%d %X").parse;
xmin = parseDate(moment.utc(xmin).format("YYYY-MM-DD HH:mm:ss"));
xmax = parseDate(moment.utc(xmax).format("YYYY-MM-DD HH:mm:ss"));