【问题标题】:New to nvD3 - how can I make my unix timestamps appear as dates on the x-axis?nvD3 的新手 - 如何让我的 unix 时间戳在 x 轴上显示为日期?
【发布时间】:2012-12-20 05:32:15
【问题描述】:

适当的披露 - 我不擅长 javascript,但正在努力学习!

我有一个数组,里面有一些类似的条目:

[1349013600] => 232

键是一个unix时间戳,值是那天的销售额。我目前正在多条形图上绘制这些图表,效果很好。

问题是我的 x 轴,目前是这样定义的:

chart.xAxis
.tickFormat(d3.format(',f'));

它将 unix 时间戳输出为针对 x 轴标签和悬停工具提示的直接 int。我想尝试让它输出为 D-M-Y 或类似的人类可读日期指示器。

我找到的最接近的是这段代码:

chart.xAxis.tickFormat(function(d) {
       var dx = testdata[0].values[d] && testdata[0].values[d].x || 0;
   return d3.time.format('%x')(new Date(dx))
 });

但我很难理解它在做什么并且无法在我的特定图表上实施。当前代码如下所示:

nv.addGraph(function() {
var chart = nv.models.multiBarChart()
            .stacked(true)

chart.xAxis
    .tickFormat(d3.format(',f'));

chart.yAxis
    .tickFormat(function(d) { return '$' + d3.format(',f')(d) });

d3.select('#chart1 svg')
    .datum(test_data2)
  .transition().duration(500).call(chart);

nv.utils.windowResize(chart.update);

return chart;
});

有人能解释一下如何让它发挥作用吗?更重要的是——为什么?感谢任何指导!

【问题讨论】:

    标签: d3.js nvd3.js


    【解决方案1】:

    我一打开赏金就解决了问题(d'oh!)

    这对我有用

    .tickFormat(function(d){return d3.time.format('%d-%b')(new Date(d));})

    诀窍是在创建此轴后重新格式化 nvd3 的数据

    【讨论】:

    • 也许如果有 5 个人认为这个答案有帮助并获得支持,我可以在声誉点上实现收支平衡
    • 我建议在 tickFormat 函数之外声明时间格式,这样您就不会为要显示的每个刻度创建新的时间格式实例(这会很慢并且浪费内存) .同样,我建议将您的数据转换为 JavaScript Date 对象作为预处理步骤,而不是作为格式化刻度的副作用。这样,如果您在其他地方引用日期,它始终是正确的 Date 对象,而不是 UNIX 秒或更糟的字符串。
    【解决方案2】:

    JavaScript 时间戳是毫秒,所以你应该在使用它之前将 Unix 时间戳乘以 1000。

    【讨论】:

    • 感谢您的提示。日期(存储在 SQL 数据库中)实际上已经是可读格式(YYYY/MM/DD),但是当我将它们从数据库中拉出时,我正在使用 strtotime(PHP 函数)对其进行转换。我知道这似乎违反直觉,但我相信实际的值分配必须发生在 unix stamp 中,以便在轴上适当地间隔它们。无论如何 - 应该已经在 s 而不是 ms。
    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多