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

Morris.js折线图日期与自定义时间格式配置咨询

Morris.js 折线图:日期格式修改与自定义时间值识别方案

没问题,这两个需求都能轻松实现,我给你拆解成两步来解决:

一、把日期显示从YYYY-mm-dd改成dd/mm/YYYY

Morris.js 自带的xLabelFormat配置项就是用来自定义X轴日期格式的,搭配parseTime参数就能搞定,这里分两种场景适配:

场景1:日期是标准格式(时间戳或YYYY-mm-dd字符串)

如果你的y字段是Morris.js能自动识别的日期(比如2014-05-20这种标准格式),直接开启parseTime: true,然后在xLabelFormat里格式化输出:

Morris.Line({
  element: 'your-chart-id', // 替换成你的图表容器ID
  data: yourData,
  xkey: 'y', // 指定用y字段作为x轴日期
  ykeys: ['a'], // 指定要展示的数值字段
  labels: ['耗时'], // y轴显示的标签
  parseTime: true,
  xLabelFormat: function(x) {
    // x是自动解析后的Date对象,提取日、月、年并转成dd/mm/YYYY
    const day = x.getDate().toString().padStart(2, '0');
    const month = (x.getMonth() + 1).toString().padStart(2, '0'); // 注意月份是从0开始的,要加1
    const year = x.getFullYear();
    return `${day}/${month}/${year}`;
  }
});

场景2:日期是自定义字符串(比如你示例里的20-05-2014)

如果原始日期是dd-mm-YYYY这类非标准格式,先关闭自动时间解析(parseTime: false),手动拆分字符串后拼接成目标格式:

Morris.Line({
  element: 'your-chart-id',
  data: yourData,
  xkey: 'y',
  ykeys: ['a'],
  labels: ['耗时'],
  parseTime: false, // 关闭自动解析,避免Morris.js识别出错
  xLabelFormat: function(x) {
    // 直接拆分原始字符串,按dd/mm/YYYY拼接
    const [day, month, year] = x.label.split('-');
    return `${day}/${month}/${year}`;
  }
});

二、让01.00.45这类分钟.秒.毫秒格式的时间正常显示

Morris.js只认数值类型的y轴数据,而01.00.45是字符串,肯定识别不了。我们要先把它转换成数值(比如总毫秒数),再在显示时转回到原格式:

第一步:预处理数据,把时间字符串转成数值

先遍历你的原始数据,把每个a字段的时间字符串转换成总毫秒数(这样Morris.js就能正常读取了):

// 你的原始数据
var rawData = [ 
  { y: '20-05-2014', a: '01.00.45'}, 
  { y: '17-06-2015', a: '00.56.20'} 
];

// 预处理:把时间字符串转成总毫秒数
var processedData = rawData.map(item => {
  // 拆分分钟、秒、毫秒,转成数字
  const [minutes, seconds, milliseconds] = item.a.split('.').map(Number);
  // 计算总毫秒数
  const totalMs = minutes * 60 * 1000 + seconds * 1000 + milliseconds;
  return {
    y: item.y,
    a: totalMs
  };
});

第二步:配置y轴标签,把数值转回原格式

在图表配置里加个yLabelFormat,把总毫秒数重新转成分钟.秒.毫秒的格式:

Morris.Line({
  element: 'your-chart-id',
  data: processedData, // 用预处理后的数值数据
  xkey: 'y',
  ykeys: ['a'],
  labels: ['耗时'],
  // 这里加上前面的日期格式化配置,比如parseTime和xLabelFormat
  parseTime: false,
  xLabelFormat: function(x) {
    const [day, month, year] = x.label.split('-');
    return `${day}/${month}/${year}`;
  },
  yLabelFormat: function(y) {
    // 把总毫秒数转回目标格式
    const totalMs = y;
    const minutes = Math.floor(totalMs / (60 * 1000));
    const remainingMs = totalMs % (60 * 1000);
    const seconds = Math.floor(remainingMs / 1000);
    const milliseconds = remainingMs % 1000;
    
    // 补零确保格式统一(比如1分钟变成01,5秒变成05)
    const formattedMin = minutes.toString().padStart(2, '0');
    const formattedSec = seconds.toString().padStart(2, '0');
    const formattedMs = milliseconds.toString().padStart(3, '0');
    
    return `${formattedMin}.${formattedSec}.${formattedMs}`;
  }
});

这样配置完,图表就能正确识别你的时间数据,同时日期和时间都能按你想要的格式完美显示啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:45:36