如何将MySQL timestamp转换为Unix毫秒时间戳适配Highstock图表
代码修改方案
你当前的问题是将时间输出为了格式化字符串,而Highstock要求时间轴数据为13位毫秒级Unix时间戳,直接修改你代码中时间处理的逻辑即可:
核心修改点
- 替换原foreach循环中生成日期字符串的逻辑,先将数据库取出的时间加16小时偏移,转成秒级时间戳后乘以1000得到毫秒时间戳
- 保留
JSON_NUMERIC_CHECK参数,确保输出的时间戳为数字类型而非字符串 - 你的代码存在重复的PHP查询逻辑,可直接删除重复段避免冗余
修改后完整代码
<?php $servername = "localhost"; $dbname = ""; $username = ""; $password = ""; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT id, value1, reading_time FROM Sensor order by reading_time desc limit 40"; $result = $conn->query($sql); $sensor_data = []; while ($data = $result->fetch_assoc()){ $sensor_data[] = $data; } $readings_time = array_column($sensor_data, 'reading_time'); $i = 0; foreach ($readings_time as $reading){ // 核心修改:转成毫秒时间戳,保留16小时偏移 $readings_time[$i] = strtotime("$reading + 16 hours") * 1000; $i += 1; } $value1 = json_encode(array_reverse(array_column($sensor_data, 'value1')), JSON_NUMERIC_CHECK); $reading_time = json_encode(array_reverse($readings_time), JSON_NUMERIC_CHECK); $result->free(); $conn->close(); ?>
补充说明
修改后输出的reading_time就是符合Highstock要求的毫秒时间戳,无需额外在JS侧做格式转换,rangeselector功能可直接正常使用。
内容的提问来源于stack exchange,提问作者james Pattinson
相关产品推荐
相关产品推荐

