D3.js似乎是将Date转换为整数

时间:2014-06-11 22:41:15

标签: d3.js

我遇到一个问题,D3.js强制日期转换为整数,因为它将它们传递给轴函数。这在我的Axis上打破d3.time.format。基本上我有:

axis.tickformat(d3.time.format("%Y-%m-%d"))

然而,这会引发错误,因为当它尝试格式化日期时,它会传递日期的整数值而不是原始日期对象(我的数据集中有Date对象,我已经检查过)。

相反,我必须这样做:

format = d3.time.format("%Y-%m-%d")
axis.tickFormat(function(date) { format(new Date(date)) }) 

哪个有效,但似乎错了,没必要。我做错了吗?

编辑:一些其他信息:

time.format函数需要Date对象。然而,似乎正在发生的是被强制转换为一个简单的整数Number。 d3.time.format使用Date.getYear()之类的函数进行格式化,因此在调用整数时会导致未定义的错误。

如前所述,通过新的Date()传递所有内容,但它应该是不必要的,因为原始数据集实际上是所有日期。

工作示例在此处运行:https://wealthbar.github.io/angular-d3/。然而,它有点复杂,也涉及AngularJS。

1 个答案:

答案 0 :(得分:0)

d3.time.format的返回是一个函数,它接受一个字符串(在这种情况下它返回一个Date对象)或一个Date对象(在这种情况下它返回一个字符串) 。当您使用d3.time.format作为axis.tickformat()的参数时,刻度格式化工具会将基准对象传递给d3.time.format。您没有指定数据的格式,但很可能是一个数字(自1970年1月1日以来的毫秒数?),在这种情况下它与预期的参数类型d3.time.format不匹配。

在任何情况下,你所概述的第二种方法都没有错。