Highcharts/JavaScript与MySQL月份不兼容问题修复求助
解决Highcharts折线图月份显示错误的问题
我完全懂你遇到的这个坑——就是PHP和JavaScript对月份索引的定义差异搞的鬼!PHP里月份是从1开始计数的(1代表1月,9代表9月),但JavaScript的Date.UTC()方法要求月份参数必须是0开始的(0对应1月,8对应9月),所以你把PHP里的9传进去,JS直接就当成10月来解析了。
给你一个简单直接的临时修复方案,只需要修改PHP中处理日期的部分就行,不用动JavaScript代码:
修改PHP日期处理逻辑
找到你代码里生成$datetime1的循环:
foreach ($dataDatum as &$value) { $datetime1[] = date('y, n, j, G, i, s', strtotime($value)); }
把它替换成下面的代码,手动将月份减1,转换成JS需要的0索引格式:
foreach ($dataDatum as &$value) { // 用DateTime对象解析日期,方便单独提取各个时间部分 $date = new DateTime($value); $year = $date->format('y'); $month = intval($date->format('n')) - 1; // 把1-12的月份转成0-11的JS格式 $day = $date->format('j'); $hour = $date->format('G'); $minute = $date->format('i'); $second = $date->format('s'); // 重新拼接成JS能识别的参数格式 $datetime1[] = "$year, $month, $day, $hour, $minute, $second"; }
为什么这个方法有效?
原来的代码里用date('n')获取的是1-12的月份数值,现在我们把它减1之后,9月就变成了8,传给Date.UTC()的时候就会被正确识别为9月了。
这个改动很小,完全符合你想要的临时修复需求,不需要重构整个代码结构,对你这种电子/单片机背景的开发者来说也容易理解和实现。
内容的提问来源于stack exchange,提问作者Bastian
相关产品推荐
相关产品推荐

