недопустимая дата в d3.scaleTime () - PullRequest
0 голосов
/ 09 апреля 2020

Я действительно новичок в js и d3, и я пытаюсь использовать набор данных с сериями времени, но он не работает. Поскольку я сам строю этот набор данных в pandas, я оба закодировал в json с date_format='iso' и без него, что означает, что я могу использовать "2019-01-02T00:00:00.000Z" или 1546387200000 для этого ответа, и да, это первая запись мои данные

То, что я сейчас делаю, это:

data = _.map(data, d => {
const ts = d.data_emprestimo;
const date = new Date(ts).toISOString();
...
return{
date,

Если я не сделаю этого, вместо 2019-01-02 возвращается день назад, как 2019-01-01

После этого:

const [minDate, maxDate] = d3.extent(data, d => d.date);
console.log(minDate,maxDate)

И все еще работает. вернуть правильную дату, но когда я использую:

const xScale = d3.scaleTime().domain([
d3.timeYear.floor(minDate), d3.timeYear.ceil(maxDate)
...
console.log(xScale.domain(), xScale.range())

журнал консоли возвращает неверную дату.

Какое правильное решение использовать такой набор данных и передать правильную дату?

это вывод, который я сейчас получаю

console log

1 Ответ

0 голосов
/ 10 апреля 2020

d3.scaleTime принимает даты в доменной функции.

В примере общего кода передается набор строк, это вызывает проблему.

Как показано во фрагменте ниже, диапазон корректно сектится всякий раз, когда объекты даты используются в доменной функции, и значения дня являются правильными.

const ts = "2019-01-02T00:00:00.000Z";
const date = new Date(ts);

const data = [{date: date}]


const xScale = d3.scaleTime().domain(d3.extent(data, d => d.date))

console.log(xScale.domain(), xScale.range())
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
...