【问题标题】:Chart.JS format date in labelChart.JS 在标签中格式化日期
【发布时间】:2019-01-23 19:52:04
【问题描述】:

如何在 Chart.JS 的数据点标签中格式化日期?

我试过了:

this.chart = new Chart(ctx,
  {
    data: {
      labels: timestamps 
                .map(t => t.toLocaleString([], { month: '2-digit', day: '2-digit', year: '2-digit', hour: '2-digit', minute: '2-digit' })),
      datasets: [
        {
          data: measurements
        }, 
        //etc...
]}});

它有效,但我收到一条 Moment.JS 警告消息:

弃用警告:提供的值不是公认的 RFC2822 或 ISO 格式...不鼓励使用非 RFC2822/ISO 日期格式,并将在即将发布的主要版本中删除。

由于我使用的方法显然不鼓励使用,因此是否有适当的方法来格式化 Chart.JS 中数据标签的日期?

labels: timestamps

labels: timestamps.map(t => t.toLocaleString(...)

【问题讨论】:

  • 您收到的警告是关于原始日期字符串值的样子。我认为您发布的代码不会这样做,因为其中没有 Moment 调用。
  • chart.js 使用 MomentJS 的日期格式规范。根据他们的documentation:“在提供时间尺度数据时,Chart.js 支持 Moment.js 接受的所有格式。”
  • 如果我将标签更改为不包含.map(...),警告就会消失。
  • 对,但首先timestamps 数组是什么?它从何而来?内容的类型是什么;它们是字符串还是 Date 实例?
  • timestampsDate[]。它由timestamps = this.dataPoints.map(x => x.timeStampDt); 填充。而measurementsmeasurements = this.dataPoints.map(x => x.measurement) 填充

标签: javascript chart.js


【解决方案1】:

我通过查看 Chart.js 提供的a sample chart 的 HTML 源文件找到了答案。

为了正确格式化日期,必须将 parser 和 tooltipFormat 属性添加到相关轴。修复我上面给出的示例:

this.chart = new Chart(ctx,
  {
    type: 'line',
    data: {
      labels: timestamps,
      datasets: [
        {
          data: measurements,
        }
      ]
    },
    options: {
      scales: {
        xAxes: [ {
            display: true,
            type: 'time',
            time: {
              parser: 'MM/DD/YYYY HH:mm',
              tooltipFormat: 'll HH:mm',
              unit: 'day',
              unitStepSize: 1,
              displayFormats: {
                'day': 'MM/DD/YYYY'
              }
            }
          }
        ],
        yAxis: [
          // etc...
        ],
      }
    }
  }
);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2021-12-27
相关资源
最近更新 更多