26

我在 csv 中有一个列(日期),它将日期存储在“2003-02-01”(ymd)中。我想将日期格式化为 2003 年 4 月之类的月份和年份。我该怎么做?

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

这里有什么问题?

4

5 回答 5

35

Javascript 不会自动将 CSV 文件中的值识别为日期,只是将它们作为字符串读取。d3 的时间函数可以很容易地将它们转换为日期时间对象

> 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"

我建议您在程序中使用日期对象来表示您的日期,并且仅在需要显示它们时将它们格式化为字符串。

于 2013-07-18T14:25:34.893 回答
6

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

我用“2018-01-15T12:37:30+0000”搜索谷歌,它的建议提供了日期结构字符串。便利。

创建一个 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))

即 1970 年 1 月

于 2018-01-25T12:47:50.760 回答
2

来自亚当的回答,这是一个小辅助函数,用于将时间字符串从一种格式转换为另一种格式:

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"
于 2015-08-30T17:24:23.697 回答
1

在 D3Js v3 中,这对我有用:

var s = "2018-11-01T19:37:55Z";

d3.time.format("%Y-%m-%dT%H:%M:%SZ").parse(s);

// Thu Nov 01 2018 19:37:55 GMT-0700 (Pacific Daylight Time)
于 2018-11-12T20:39:54.137 回答
1

如果您要获取日期,请以字符串格式在变量“ d =(例如:'2003-03-01')”中说,

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

这将导致日期为“ Jan-2003 ”格式。

于 2016-03-31T08:02:54.400 回答