D3v4:d3.timeParse失败,带有UNIX纪元秒(%s)

gl0*_*l03 12 javascript datetime d3.js

我的数据集包括UNIX时间戳,例如"1509392160".我似乎无法解析那些使用d3.timeParse("%s"),返回null.

检查反向过程也d3.timeFormat失败了.官方示例和所有其他格式字符串工作:

var formatTime = d3.timeFormat("%B %d, %Y");
formatTime(new Date); // -> "June 30, 2015"
Run Code Online (Sandbox Code Playgroud)

但是,格式化为UNIX(毫秒)只会返回"%s"和"%Q"的"s"或"Q":

var formatTime = d3.timeFormat("%s");
formatTime(new Date); // -> "s"
Run Code Online (Sandbox Code Playgroud)

使用D3 v4.11.0 btw.我错过了什么?

And*_*eid 7

我只使用d3-time-format模块运行此代码并且没有问题:

var parse = d3.timeParse("%s");
var time = parse(1509392160);

console.log(time);

var format = d3.timeFormat("%s");
time = format(Date.now());

console.log(time);
Run Code Online (Sandbox Code Playgroud)
<script src="https://d3js.org/d3-time-format.v2.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

但是,正如您所知,这不适用于d3 v4.11(也不适用于任何其他版本的d3 v4).似乎d3-time-format最近才增加了支持解析UNIX时间戳的功能,并于2017年10月9日发布.

"%s"和"%Q"选择器在最新版本中添加了"%f","%u"和"%V",这些其他选项在v4.11中似乎也不起作用:

console.log(d3.timeParse("%u")(1));  // day of week
console.log(d3.timeParse("%V")(25)); // week of year
console.log(d3.timeParse("%f")(100));// microseconds

console.log("For Comparison, %Y:");
console.log(d3.timeParse("%Y")(2017)); // Year
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.11.0/d3.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

同时,看来d3 v4.11于2017年10月3日发布.因此,最近的d3核心库似乎在这方面已经过时了.我想很快就会有更新版本.

虽然您应该能够将核心库用于其他所有内容,并使用模块进行时间格式化/解析以获得所需的功能(直到出现更新):

var parse = d3.timeParse("%Q");
var time = parse(1509392160);

d3.select("body").append("p")
  .html(time);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.11.0/d3.min.js"></script>
<script src="https://d3js.org/d3-time-format.v2.min.js"></script>
Run Code Online (Sandbox Code Playgroud)