Подтвердить что ты не робот

Формат даты в D3.js

У меня есть столбец (дата) в csv, который хранит дату в "2003-02-01" (y-m-d). Я хотел бы отформатировать дату в месяце и году, например, в апреле 2003 года. Как мне это сделать?

var format = d3.time.format("%m-%Y");
data.forEach(function(d,i) {
d.date = format(d.date);
});

Я получаю следующее сообщение об ошибке Ошибка: TypeError: n.getFullYear is not a function Line: 5

файл csv содержит значения:

200,300,400,288,123,2003-01-01
300,700,600,388,500,2003-02-01

в чем проблема?

4b9b3361

Ответ 1

Javascript автоматически не распознает значения в CSV файле как даты, просто читая их как строки. функции времени d3 легко конвертировать их в объекты datetime:

> parseDate = d3.time.format("%Y-%m-%d").parse
> parseDate('2003-01-01')
Wed Jan 01 2003 00:00:00 GMT-0600 (Central Standard Time)

Чтобы отформатировать даты, как вы хотите, нам нужно перейти в другую сторону: от объекта даты до строки:

> formatDate = d3.time.format("%b-%Y")
> formatDate(parseDate('2003-01-01'))
"Jan-2003"

Я бы рекомендовал представить ваши даты в вашей программе с объектами даты и только форматировать их как строки, когда вам нужно их отображать.

Ответ 2

от Adam answer, вот небольшая вспомогательная функция для преобразования временной строки из формата в другую:

var formatTime = function(input, formatInput, formatOutput){
    var dateParse = d3.time.format(formatInput).parse;
    var dateFormat = d3.time.format(formatOutput);
    return dateFormat(dateParse(input));
};

использовать:

formatTime("2003-01-01", "%Y-%m-%d", "%b-%Y");

// output -> "Jan-2003"

Ответ 3

если вы получаете дату, давайте скажем в переменной "d = (например:" 2003-03-01 ") в строчном формате, затем

var monthNameFormat = d3.time.format("%b-%Y");
return monthNameFormat(new Date(d));

это приведет к дате в формате Янв-2003.

Ответ 4

D3 версия 4 теперь имеет разные методы времени.

https://keithpblog.org/post/upgrading-d3-from-v3-to-v4/ https://github.com/d3/d3/blob/master/CHANGES.md

Дата вашего источника

var d = {created_time : "2018-01-15T12:37:30+0000"}

Структура этой даты =% Y-% m-% dT% H:% M:% S% Z

Я искал google с "2018-01-15T12: 37: 30 + 0000", и это предложение предоставило строку структуры даты. Handy.

Создайте timeParser для преобразования (разбора) строки даты в объект даты

var parseDate = d3.utcParse("%Y-%m-%dT%H:%M:%S%Z")
//parseDate(d.created_time)

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

var formatDate = d3.timeFormat("%b-%Y")
return formatDate(parseDate(d.created_time))

то есть. Jan-1970