为什么CSV文件中的日期输出为NaN?

时间:2017-03-12 01:27:53

标签: javascript datetime d3.js

我刚刚在Lynda.com上完成了一个视频,并且无法获得教练使用D3获得的相同结果。我已经创建了一个更简单的文件版本,它仍然无法正常工作。当我尝试检索日期时,控制台输出NaN。

作为Excel输出的CSV是:

Date,AM
1995-04-16,3.5
1995-04-17,14.0
1995-04-18,10.8

并且Javascript文件包含:

d3.csv("bg_test_date_parsing.csv", function(d) {
  return {    Date: +d.Date,  AM: +d["AM"]  };
}, function(data) {
    console.log(data[1]);
});

Mozilla的控制台给了我:

Object { Date: NaN, AM: 14 }

我无法继续进行任何项目,因为我不知道从哪里开始正确导入日期。 lynda.com上的视频一直在继续,我仍然没有得到如何导入和格式化日期。此外,CSV最初格式化为16-04-1995作为示例,从医疗仪器输出,我手动将其键入为年 - 月 - 日格式,显然D3将使用。我花了很长时间才使用Google来实现这一目标,所以我显然缺少一些重要的理解。

1 个答案:

答案 0 :(得分:4)

+d.Date并非以您想要的方式运作。在+上致电16-04-1995会产生NaN。您无法将该字符串转换为类似的数字。

您可以像这样转换字符串var myDate = new Date('04-16-1995')

不幸的是,您的格式是日 - 月 - 年,而javascript需要月 - 日 - 年。

请参阅此问题,了解如何:

Convert dd-mm-yyyy string to date

更新正如@GerardoFurtado在评论中指出的那样,d3库有一些内置的日期解析选项,可以转换不同格式的日期。请参阅他评论中的链接。

使用d3,您可以将字符串转换为日期,如下所示:

var myDate = d3.timeParse("%d-%m-%Y")('16-04-1995')

或者,在你的循环中:

Date: d3.timeParse("%d-%m-%Y")(d.Date)