为什么以下范围有效...
d3.time.minute.range(
new Date('Sat Aug 17 2013 00:00:00 GMT-0400'),
new Date('Sat Aug 17 2013 06:00:00 GMT-0400'),
22);
...返回这样的数组......
[
Sat Aug 17 2013 00:00:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 00:22:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 00:44:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 01:00:00 GMT-0400 (Eastern Daylight Time), // << normalized to 1am
Sat Aug 17 2013 01:22:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 01:44:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 02:00:00 GMT-0400 (Eastern Daylight Time), // << normalized to 2am
...
]
......而不是这样?
[
Sat Aug 17 2013 00:00:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 00:22:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 00:44:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 01:06:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 01:28:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 01:50:00 GMT-0400 (Eastern Daylight Time),
Sat Aug 17 2013 02:12:00 GMT-0400 (Eastern Daylight Time),
...
]
我正在尝试渲染时间轴,然后使用d3.time.scale
关联像素和时间。在此示例中,每个rect
I渲染表示22分钟。当我将.data()
绑定到此范围函数的结果时,我的text
元素在所有情况下都不能清楚地表示实际时间。
如果我避免使用d3.time.minute.range
而只是自己添加22分钟(.getTime() + 22 * 60 * 1000
),我会遇到哪些问题?
答案 0 :(得分:2)
根据mbostock在这里所说的,我认为你需要自己动手: http://grokbase.com/t/gg/d3-js/1344en8cz8/time-scale-always-forcibly-display-first-date-of-a-month
所以:
d3.time.minute.range(
new Date('Sat Aug 17 2013 00:00:00 GMT-0400'),
new Date('Sat Aug 17 2013 06:00:00 GMT-0400'))
.filter(function(d) {
return (d - new Date('Sat Aug 17 2013 00:00:00 GMT-0400')) % (22 * 60 * 1000) == 0;
});
这里小提琴: http://jsfiddle.net/JHTQf/
就问题而言,我认为两者都可以,因为浏览器没有闰秒。我考虑了DST,但我认为这是通过UTC计算确定的。