Формат даты в 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
в чем проблема?
Ответы
Ответ 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