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

Dygraphs鼠标悬停日期格式转换失效:Y-m-d转d-m-Y求助

解决Dygraphs鼠标悬停日期格式修改后数据消失的问题

嘿,我太懂那种调了半天配置反而把内容搞没了的挫败感!你的问题其实出在一个超容易忽略的小细节上——你的valueFormatter函数没有返回格式化后的结果,Dygraphs拿不到要显示的内容,自然就把悬停时的所有数据都隐藏了。

问题根源

你写的配置里,valueFormatter只执行了strftime方法,但没有把这个方法的结果返回给Dygraphs:

// 错误写法:缺少return返回值
axes: { 
  x: { 
    valueFormatter: function(ms) { 
      new Date(ms).strftime('d-m-Y'); 
    } 
  } 
}

正确的配置写法

只需要给函数加上return关键字,把格式化后的字符串返回即可:

axes: {
  x: {
    valueFormatter: function(ms) {
      // 关键:返回格式化后的日期字符串
      return new Date(ms).strftime('%d-%m-%Y');
    }
  }
}

这里额外提一句:如果想要日期和月份显示为两位数(比如05-03-2024而不是5-3-2024),建议用%d和%m代替d和m,这是strftime的标准格式符规则。

兼容性备选方案(无需依赖strftime)

如果你的运行环境没有Date.prototype.strftime(原生JS本身不带这个方法,通常是依赖第三方库或Dygraphs扩展),可以用原生Date API手动拼接日期,兼容性更好:

axes: {
  x: {
    valueFormatter: function(ms) {
      const date = new Date(ms);
      // 月份是0基的,所以要加1,并用padStart补0成两位数
      const day = String(date.getDate()).padStart(2, '0');
      const month = String(date.getMonth() + 1).padStart(2, '0');
      const year = date.getFullYear();
      return `${day}-${month}-${year}`;
    }
  }
}

额外检查点

如果修改后还是有问题,可以确认:

  • 没有误修改highlightCallback或其他影响悬停提示的配置
  • 传入Dygraphs的时间戳是合法的毫秒级时间戳

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:33:00