nvd3时间H:M:S在

时间:2016-07-03 11:45:23

标签: javascript d3.js nvd3.js

我正在尝试以小时,分钟和秒显示y2轴(在右侧),但返回的值不正确。

我在GMT中有以下unix时间戳:

        [1396303200000, 1481501473], //should display on y2axis as 00:11:13
        [1398895200000, 1467497437], //should display on y2axis as 00:10:37
        [1401573600000, 1481501521], //should display on y2axis as 00:12:01
        [1404165600000, 1481501493], //should display on y2axis as 00:11:33
        [1406844000000, 1481501630], //should display on y2axis as 00:13:50
        [1409522400000, 1481501668], //should display on y2axis as 00:14:28
        [1412114400000, 1481501615], //should display on y2axis as 00:13:35
        [1414796400000, 1481501605], //should display on y2axis as 00:13:25
        [1417388400000, 1481501557], //should display on y2axis as 00:12:37
        [1420066800000, 1481501567], //should display on y2axis as 00:12:47
        [1422745200000, 1481501501]  //should display on y2axis as 00:11:41

然而,nvd3图表中显示的值并不是我所期待的......如果我使用epoch转换器,我会看到我期待的值。

尝试过以下代码,但值仍显示不正确:

      chart.y2Axis
          .tickFormat(function(d) {
              return d3.time.format('%H:%M:%S')(new Date(d))
           });

也尝试过:

return d3.time.format('%X')(new Date(d))

有人可以帮助解释可能存在的问题吗?

这里有完整的工作小提琴和代码http://jsfiddle.net/wrcjp79o/2/

1 个答案:

答案 0 :(得分:1)

首先,JavaScript new Date(value)构造函数expects

  

- 表示毫秒数的整数值,自1开始   1970年1月00:00:00 UTC(Unix Epoch;但考虑到大多数Unix   时间戳功能以秒为单位计算。)

你给它秒,所以倍数为1000。

其次,您使用的是d3.time.format,它会转换为当地时间。如果您一直想要UTC,则希望使用d3.time.format.utc

  chart.y2Axis
      .tickFormat(function(d) {
          return d3.time.format.utc('%H:%M:%S')(new Date(d * 1000))              
       });

更新了fiddle