我正在尝试以小时,分钟和秒显示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/
答案 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。