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

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

本文关键字:时间刻度 PM js 具有 D3      更新时间:2023-09-26

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

当从几个月放大到几天时,有时我会在轴中得到%H %p日期格式(例如,呈现"11 PM",不显示日期。这呈现如下:

周三 11 |周五 13 |晚上 11 点 |晚上 11 点 |晚上 11 点 ...

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

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

至少,我能够在迈克·博斯托克(Mike Bostock)的这两个块中看到这种怪癖:可缩放区域,或通过刷牙的焦点+上下文。

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

出现此问题的原因是,用于分析日期的时区和浏览器中设置的时区不同。有关问题和解决方案的说明,请参阅此页面。

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

为了纠正这个问题,就我而言,我将 x 刻度从:

d3.time.scale() , 至

d3.time.scale.utc() .

此更改(如 Lars 评论中提供的链接中所建议的那样)似乎已经解决了这个问题。