我正在构建一个在 x 轴上显示时间的 chart.js 折线图。我故意将数据以 utc 格式传递给图表,如下所示:
[{
y: 143,
x: "2020-06-17T19:50:50Z"
},
...
]
似乎图表会自动将刻度标签格式化为查看图表的用户的时区。但有时数据是在与收集数据不同的时区查看的,所以我希望刻度标签出现在我存储在的那个区域中localStorage.timezone
,这将是一个精确的字符串,如“America/New_York”。
如何在我想要的时区显示 x 轴标签?
这是我的x轴配置:
xAxes: [{
min: leftEnd,
max: rightEnd,
maxBarThickness: 10,
type: 'time',
time: {
displayFormats: {
'second': 'MMM DD h:mm a',
'minute': 'MMM DD h:mm a',
'hour': 'MMM DD h:mm a',
'day': 'MMM DD h:mm a',
'month': 'MMM DD h:mm a',
'year': 'MMM DD h:mm a',
},
parser: function (utcMoment) {
console.log( DateTime.fromISO(utcMoment, { zone: localStorage.timezone })
.toLocaleString(DateTime.DATETIME_FULL_WITH_SECONDS)) //logs as desired
return DateTime.fromISO(utcMoment, { zone: localStorage.timezone })
.toLocaleString(DateTime.DATETIME_FULL_WITH_SECONDS)
// but has no effect on the actual chart label
}
},
ticks: {
maxTicksLimit: 11,
autoSkip: true,
maxRotation: 0,
minRotation: 0
},
gridLines: {
drawTicks: true,
tickMarkLength: 10,
display: false
}
}],
我使用 luxon/moment 库来格式化传入的日期,并且它可以正确地控制日志(即June 17, 2020, 9:11:20 AM EDT
),但该格式根本没有出现在图表的实际渲染中。它仍然看起来像June 17 6:11 AM
(因为它是在 displayFormat 对象中指定的,但删除它并没有帮助)
我也尝试过指定timezone: localStorage.timezone
但没有运气
如果有帮助,这一切都是在 Angular 组件中构建的。任何帮助将不胜感激!谢谢