Time 为什么d3时间范围函数在使用step时会标准化值?

Time 为什么d3时间范围函数在使用step时会标准化值?,time,d3.js,Time,D3.js,为什么以下范围会起作用 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

为什么以下范围会起作用

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
...
]
我试图渲染一个时间轴,然后使用
d3.time.scale
关联像素和时间。在本例中,每个
rect
I渲染表示22分钟。当我将
.data()
绑定到此范围函数的结果时,我的
文本
元素在所有情况下都不能清楚地表示实际时间


如果我避免使用d3.time.minute.range,而自己只增加22分钟(
.getTime()+22*60*1000
),我会遇到什么样的问题?

根据mbostock在这里说的,我认为你需要自己动手:

因此:

在这里拉小提琴:

至于问题,我认为两者都可以,因为浏览器没有闰秒。我会考虑DST,但我认为这是UTC计算确定的

[
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.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;
});