D3.js 具有“晚上 11 点”值的时间刻度怪癖

D3.js time scale quirk with "11 PM" values

在使用 d3.time.scale() 时,我看到一些关于刻度线格式的有趣行为。

当从几个月放大到几天时,有时我将轴中的日期格式设为 %H %p(例如呈现“晚上 11 点”,不显示日期。)呈现如下:

Wed 11 | Fri 13 | 11 PM | 11 PM | 11 PM ...

我使用的数据集有粒度,没有时间信息。我本来希望 %a %d (这将呈现周六 15)。实际上,一些刻度线确实显示了正确的格式,而另一些则没有。

有没有办法避免这种怪癖?

我至少在 Mike Bostock 的这两个区块中看到了这个怪癖:Zoomable Area, or Focus+Context via Brushing

我在线程 "d3js: time scaling and “1901”" 中看到可以将 tickFormat 属性 添加到轴,从而覆盖正常格式。这里的问题是我想保留缩放格式(从几年到几天)。我不确定如何传递 tickFormat 格式列表,或者在某些情况下甚至只覆盖格式。

正如@Lars Kotthoff 指出的那样, 时区问题。我使用的数据没有时区信息和时间信息(例如“15-Aug-2000”),并且错误出现在 DST 期间的更改日期。

为了更正这个问题,就我而言,我将 x 比例从:

d3.time.scale(),至

d3.time.scale.utc().

此更改(如 link provided in Lars' comment 中所建议)似乎已解决问题。

出现这个问题是因为解析日期的时区和浏览器中设置的时区不同。有关问题和解决方案的说明,请参阅 this page