You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Chartkick中剥离日期仅保留时间,实现24小时横轴叠加时序数据?

解决Chartkick折线图叠加两天24小时数据的问题

要把不同日期的两条时序曲线叠加到24小时横轴上,核心是剥离datetime字段的日期部分,只保留时间信息,让两条数据的横轴标签一致。具体修改如下:

方法1:将datetime格式化为时间字符串(如"00:00")

修改数据处理逻辑,用Ruby的strftime方法把完整datetime转换为仅包含小时和分钟的字符串,替换原有的datetime对象:

<% the_date_time_span = the_date..the_date + 23.hour %>
<% other_date_time_span = other_date..other_date + 23.hour %>

<%= line_chart [
  {name: "One day", data: HourByHour.where(datetime: other_date_time_span).pluck(:datetime, :enphase).map { |dt, val| [dt.strftime("%H:%M"), val] }},
  {name: "Another day", data: HourByHour.where(datetime: the_date_time_span).pluck(:datetime, :enphase).map { |dt, val| [dt.strftime("%H:%M"), val] }}      
] %>

如果需要基于UTC时间显示,把dt.strftime改成dt.utc.strftime("%H:%M")即可。

方法2:直接使用小时数值(如0-23)

如果不需要显示具体时间格式,也可以用datetime的小时数值作为横轴标签,代码更简洁:

<%= line_chart [
  {name: "One day", data: Hour.where(datetime: other_date_time_span).pluck(:datetime, :enphase).map { |dt, val| [dt.hour, val] }},
  {name: "Another day", data: Hour.where(datetime: the_date_time_span).pluck(:datetime, :enphase).map { |dt, val| [dt.hour, val] }}      
] %>

注意事项

  • 确保两天的数据集每个小时都有对应记录,否则Chartkick会自动处理缺失点(比如留空或插值);
  • 若存在时区差异,需统一转换为同一时区的时间后再处理,避免横轴错位。

内容的提问来源于stack exchange,提问作者Greg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:16:22