2

次の範囲が機能するのはなぜですか...

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タイムラインをレンダリングしてから、ピクセルと時間を関連付けるために使用しようとしています。この例では、I render はそれぞれrect22 分を表すことを意図しています。.data()この範囲関数の結果にバインドするとtext、すべての場合において要素が実際の時間を明確に表すわけではありません。

d3.time.minute.range使用せずに自分で 22 分 ( ) を追加すると、どのような問題が発生します.getTime() + 22 * 60 * 1000か?

4

1 に答える 1

2

ここでmbostockが言ったことによると、自分でロールバックする必要があると思います:

そう:

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 計算で修正されると思います。

于 2013-08-30T15:37:05.580 に答える