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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:48:03