我的数据集包括UNIX时间戳,例如“1509392160”。我似乎无法解析使用d3.timeParse("%s")
的那些,它返回null。
使用d3.timeFormat
检查反向流程也失败了。官方示例和所有其他格式字符串有效:
var formatTime = d3.timeFormat("%B %d, %Y");
formatTime(new Date); // -> "June 30, 2015"
但是,格式化为UNIX(毫秒)只会返回“%s”和“%Q”的“s”或“Q”:
var formatTime = d3.timeFormat("%s");
formatTime(new Date); // -> "s"
使用D3 v4.11.0 btw。 我错过了什么?
答案 0 :(得分: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);
<script src="https://d3js.org/d3-time-format.v2.min.js"></script>
但是,正如您所知,这不适用于d3 v4.11(也不适用于任何其他版本的d3 v4)。似乎d3-time-format最近才增加了支持解析UNIX时间戳的功能,并且是released on October 9, 2017。
在最新版本中添加了“%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
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.11.0/d3.min.js"></script>
同时,似乎d3 v4.11是released on October 3rd, 2017。因此,最近的d3核心库似乎在这方面已经过时了。我想很快就会有更新版本。
虽然您应该能够将核心库用于其他所有内容,并使用模块进行时间格式化/解析以获得所需的功能(直到出现更新):
var parse = d3.timeParse("%Q");
var time = parse(1509392160);
d3.select("body").append("p")
.html(time);
<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>
答案 1 :(得分:4)
作为Andrew's answer的补充,这就是问题所在:
D3 default(core)bundle在source code:
中有这些说明符var parses = {
"a": parseShortWeekday,
"A": parseWeekday,
"b": parseShortMonth,
"B": parseMonth,
"c": parseLocaleDateTime,
"d": parseDayOfMonth,
"e": parseDayOfMonth,
"H": parseHour24,
"I": parseHour24,
"j": parseDayOfYear,
"L": parseMilliseconds,
"m": parseMonthNumber,
"M": parseMinutes,
"p": parsePeriod,
"S": parseSeconds,
"U": parseWeekNumberSunday,
"w": parseWeekdayNumber,
"W": parseWeekNumberMonday,
"x": parseLocaleDate,
"X": parseLocaleTime,
"y": parseYear,
"Y": parseFullYear,
"Z": parseZone,
"%": parseLiteralPercent
};
正如您所看到的,如果将其与complete list here进行比较,则会遗漏所有这些:
所以,现在的替代方案是引用时间独立微库:
<script src="https://d3js.org/d3-time-format.v2.min.js"></script>
编辑:确实,默认捆绑包还没有那些新的指令。这是Bostock关闭的GitHub问题:https://github.com/d3/d3-time-format/issues/38
同时,只需坚持使用独立的微库。