D3嵌套格式设置日期不正确
D3 nest formatting date incorrectly
我从D3.js嵌套功能中得到了一些奇怪的行为,似乎键和汇总正在将test_date从date对象转换为字符串。
这是我的代码:
var data = [{
"test_type": "x1",
"test_date": "2014-07-15"
}, {
"test_type": "x3",
"test_date": "2014-07-16"
}, {
"test_type": "x2",
"test_date": "2014-07-27"
}, {
"test_type": "x1",
"test_date": "2014-07-28"
}];
var parseDate = d3.time.format("%Y-%m-%d").parse;
data.forEach(function(d) {
d.test_date = parseDate(d.test_date);
});
var result = d3.nest()
.key(function(d) {
return d.test_type;
})
.key(function(d) {
return d.test_date;
})
.rollup(function(leaves) {
return leaves.length;
})
.entries(data);
结果是:
[{
"key": "x1",
"values": [{
"key": "Tue Jul 15 2014 00:00:00 GMT-0600 (Mountain Daylight Time)",
"values": 1
}, {
"key": "Mon Jul 28 2014 00:00:00 GMT-0600 (Mountain Daylight Time)",
"values": 1
}]
}, {
"key": "x3",
"values": [{
"key": "Wed Jul 16 2014 00:00:00 GMT-0600 (Mountain Daylight Time)",
"values": 1
}]
}, {
"key": "x2",
"values": [{
"key": "Sun Jul 27 2014 00:00:00 GMT-0600 (Mountain Daylight Time)",
"values": 1
}]
}]
我需要嵌套的键值是日期对象,而不是字符串。有人知道是什么原因造成的吗?
这是一个关于这个问题的问题http://jsfiddle.net/2ryahc9L/1/
函数(和对象)d3.time.format
以两种方式工作:
d3.time.format('%Y-%m-%d').parse('2014-08-29')
将返回一个Date
对象。它使用该格式来了解如何解释作为参数给定的字符串d3.time.format('%Y-%m-%d')(new Date(2014, 7, 29))
将返回字符串,格式为2014-08-29'
此外,d3.nest
中的密钥将始终被强制为字符串。您需要将这两种形式结合起来,以获得所需的行为。当做
我找到了一个对我有效的解决方案。我也遇到了类似的问题。我想用时间戳作为关键字来嵌套数据。AmeliaBR写道,键是字符串。但是,我想使用键作为对象,因为它应该是我图表的x轴。
var data = [{
"test_type": "x1",
"test_date": "2014-07-15"
}, {
"test_type": "x3",
"test_date": "2014-07-16"
}, {
"test_type": "x2",
"test_date": "2014-07-27"
}, {
"test_type": "x1",
"test_date": "2014-07-15"
}];
var parseDate = d3.time.format("%Y-%m-%d").parse;
我使用另一个日期字段,仅用于嵌套数据的键,而不将数据解析为日期/时间。
data.forEach(function(d) {
d.key_date = d.test_date;
d.test_date = parseDate(d.test_date);
});
var result = d3.nest()
.key(function(d) {
return d.key_date;
})
.rollup(function(leaves) {
return leaves.length;
})
.entries(data);
对于result
,我将再次添加test_date
作为对象,因为key_date
是一个字符串。
result.forEach(function(d) {
d.test_date = parseDate(d.key);
});
我不知道这是不是一个好方法。如果没有,请提出建议。谢谢
相关文章:
- 从int值来看,Javascript日期不正确
- Safari浏览器中的格式化日期不正确
- 格式为nnnnnnnn的字符串在电子表格中显示为日期或不正确
- JavaScript:日期不正确
- 为什么在IE8中禁用日期不能正确使用Jquery日期选择器
- x轴上的日期不正确
- asp.net 图表控件显示不正确的工具提示日期时间值
- 日期() 结果不正确
- 为什么 IE 和 FF 不会为输入类型日期返回正确的属性或类型
- Javascript Date 对象不正确的日期
- 时间戳中的日期不正确,例如DD_MM_YYYY_HH_MI_SS
- Flot工具提示中显示的日期不正确
- Angular UI网格日期格式不正确
- MongoDB日期时间值存储不正确
- 日期在Highcharts图中显示不正确,时间数据不规则
- Jquery日期选择器图标位置不正确
- 输入日期字段中显示的星期几不正确
- D3嵌套格式设置日期不正确
- Javascript正则表达式与日期不正确匹配
- 日历脚本设置的日期不正确(天减一)