我试图根据以下内容将日期时间拆分为两个变量 cx(应该是一年中的日期)和 cy(应该是小时+分钟/60):
<!-- date format of d.date: 24-8-2016 9:47:38-->
var parseDayinYearFormat = d3.time.format('%j').parse;
var parseHourFormat = d3.time.format('%H').parse;
var parseMinuteFormat = d3.time.format('%M').parse;
<!-- add the objects-->
var circles = svg.selectAll("circle")
.data(data)
.enter()
.append("circle");
var circleAttributes = circles
.attr("cx", function (d) { return +parseDayinYearFormat(d.date); })
.attr("cy", function (d) { return +parseHourFormat(d.date)+(parseMinuteFormat(d.date)/60); })
.attr("r", function (d) { return 20.0/(9-d.total); })
.attr("class", function (d) {if (d.w>d.total-d.w) {return "cr"} else { return "cb" }});
但是 d3 表现不佳:cx 和 cy 变成 NaN,并且 d3 给出错误 Uncaught TypeError: n.apply is not a function
请帮忙。
最佳答案
您需要使用单个格式对象解析整个字符串。您无法通过一系列解析来解析字符串。
使用d3 version 3.x documentation我想出了以下内容,适用于您的示例。
var datestring = '24-8-2016 9:47:38';
var format = d3.time.format('%-d-%-m-%Y %-H:%-M:%-S');
console.log(format.parse(datestring))
// "2016-08-24T13:47:38.000Z" // (my time zone is UTC-4)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
请注意,由于您的示例 24-8-2016 9:47:38
有许多字段没有显示零填充,因此我在 %
和说明符,即 %-d
,告诉 d3 开头可能没有零。
另请注意,在您的示例中,不可能 24
是一年中的某一天,介于 1 和 366 之间:24 显然只是一天月,对吗?
但是,从您的代码片段来看,您只想从字符串中提取日期、小时和分钟。对于这个简单的目的,d3.time.format
可能有点过头了,因为它给了你一个 Date对象,然后您必须解析该对象以提取天/小时/分钟。考虑使用正则表达式来完成此任务。
关于date - d3.min.js 给出 Uncaught TypeError : n. apply 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087601/