在Angular项目中使用amcharts选中图表区域时如何获取完整日期时间范围值
问题原因
你调用的getPositionLabel()方法获取的是坐标轴当前渲染展示的刻度文本,amcharts的日期轴会自动根据视图范围调整标签显示格式(比如时间范围大的时候仅展示日/月,小范围才展示完整时间),因此只能拿到截断后的日期部分。
你需要直接从坐标位置转换为原始日期时间值,而不是读取渲染后的展示标签。
修正后的代码
this.chart.cursor.behavior = "selectX"; this.chart.cursor.events.on("selectended", (ev) => { const range = ev.target.xRange; const axis = ev.target.chart.xAxes.getIndex(0) as am4charts.DateAxis; // 直接将坐标位置转换为原始毫秒级时间戳 const fromTimestamp = axis.getPositionValue(axis.toAxisPosition(range.start)); const toTimestamp = axis.getPositionValue(axis.toAxisPosition(range.end)); // 自行格式化为完整日期,也可替换为项目中使用的日期工具库(如date-fns、moment)的格式化方法 const from = new Date(fromTimestamp).toLocaleString(); const to = new Date(toTimestamp).toLocaleString(); alert(`Selected from ${from} to ${to}`); });
补充说明
如果需要自定义日期格式,比如YYYY-MM-DD HH:mm:ss,直接替换toLocaleString()为对应的格式化逻辑即可,拿到的fromTimestamp和toTimestamp是标准的毫秒级时间戳,兼容所有日期处理工具。
如果使用的是amcharts v5版本,把getPositionValue替换为对应APIpositionToValue即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Mariem
相关产品推荐
相关产品推荐

