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
相关产品推荐
相关产品推荐

