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

如何在Chart.js点击事件中获取YYYYMM格式日期值并弹窗显示

实现Chart.js柱状图点击弹窗展示YYYYMM日期的方法

1. 后端(PHP)准备带YYYYMM日期的数据源

不管数据来自数据库还是手动生成,要保证每个数据点都包含YYYYMM格式的日期值,转成JSON传给前端:

<?php
// 示例数据,实际按需替换成你的业务数据源
$chartData = [
    ['month' => 'JANUARY', 'value' => 153, 'date' => '202301'],
    ['month' => 'FEBRUARY', 'value' => 210, 'date' => '202302'],
    ['month' => 'MARCH', 'value' => 187, 'date' => '202303']
];
// 输出JSON格式数据给前端调用
echo json_encode($chartData);
?>

2. 前端Chart.js配置点击事件

先把后端传来的数据拆分为图表所需的标签、数值、日期数组,再通过onClick事件捕获点击的柱子,取出对应日期展示。

场景一:弹窗同时显示月份、数值和YYYYMM日期

// 假设已通过AJAX获取到PHP返回的chartData(硬编码数据直接定义数组即可)
const chartData = /* 此处填入从PHP获取的JSON数据 */;

// 拆分数据为图表可用格式
const monthLabels = chartData.map(item => item.month);
const dataValues = chartData.map(item => item.value);
const yymmDates = chartData.map(item => item.date);

// 初始化柱状图
const ctx = document.getElementById('myChart').getContext('2d');
new Chart(ctx, {
    type: 'bar',
    data: {
        labels: monthLabels,
        datasets: [{
            label: '月度数据',
            data: dataValues,
            backgroundColor: 'rgba(54, 162, 235, 0.2)',
            borderColor: 'rgba(54, 162, 235, 1)',
            borderWidth: 1
        }]
    },
    options: {
        onClick: function(e) {
            // 获取点击的柱子对应的索引
            const activePoints = this.getElementsAtEventForMode(e, 'nearest', { intersect: true }, true);
            if (activePoints.length === 0) return;
            
            const idx = activePoints[0].index;
            // 弹窗展示全部信息
            alert(`月份:${monthLabels[idx]}\n数值:${dataValues[idx]}\n日期:${yymmDates[idx]}`);
        },
        scales: {
            y: { beginAtZero: true }
        }
    }
});

场景二:弹窗仅显示YYYYMM日期

只需修改onClick中的弹窗内容,其余代码不变:

onClick: function(e) {
    const activePoints = this.getElementsAtEventForMode(e, 'nearest', { intersect: true }, true);
    if (activePoints.length === 0) return;
    
    const idx = activePoints[0].index;
    alert(`日期:${yymmDates[idx]}`);
}

如果你的数据是直接写在前端而非从PHP获取,直接在前端定义包含date字段的chartData数组即可,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:20:03