dqgg25493 2013-07-19 07:13
浏览 53
已采纳

使用php和json将mysql timestamp数组转换为javascript日期数组

Hi there I am building a system that collect data. I store the data in mysql database and display it using amCharts. I making archive chart that displays change in the data over time. I have problems with conversion between mysql timestamp array and javascript date array using php and josn.

The mysql query goes like this:

SELECT 
    UNIX_TIMESTAMP( data ) AS data,ROUND(AVG(CurrentA),3),ROUND(AVG(CurrentB),3),ROUND(AVG(CurrentC),3)
FROM
    Danni
WHERE 
    data 
    BETWEEN 
        '2013-07-13 00:00:00' 
    AND 
        '2013-07-16 00:00:00' 
GROUP BY
    FLOOR(UNIX_TIMESTAMP(data)/72)
LIMIT 40

The returned data is formated by this php code:

$data = array();
while ($row = mysql_fetch_array($ustroistvo)){
    $data['date'][] = $row['0'];
    $data['CurrentA'][] = $row['1'];
    $data['CurrentB'][] = $row['2'];
    $data['CurrentC'][] = $row['3'];
}
echo json_encode($data);
exit();

So the end result is

{"date":["1373748170","1373748192","1373748264","1373748336","1373748408","1373748480","1373748553","1373748624","1373748696","1373796506","1373796577","1373796648","1373796720","1373796792","1373796864","1373796936","1373797008"],"CurrentA":["45.667","37.794","37.508","35.815","31.238","33.061","32.937","35.385","36.020","31.852","34.047","34.508","30.672","37.292","32.554","39.262","32.314"],"CurrentB":["39.000","36.921","33.769","35.123","36.492","41.576","42.492","34.862","36.041","34.967","37.062","33.108","35.531","34.262","33.385","35.877","35.941"],"CurrentC":["35.000","32.429","35.862","36.785","34.873","36.894","31.921","36.938","33.714","40.541","28.688","34.308","33.266","39.846","35.708","34.908","32.118"]}

So to convert the date object to actual javascript date I use:

success: function (data) {
  console.log(data.date);
  data.date=new Date(data.date*1000);
  console.log(data.date);
  chart.dataProvider=data;
  chart.validateData();
}

The problem lies here data.date=new Date(data.date*1000) gives me invalid date and I think it is because data.date is array. I do not know how to format it properly so that data.date=new Date(data.date*1000) returns date array.

  • 写回答

1条回答 默认 最新

  • duanchun2349 2013-07-19 07:17
    关注

    Simply

     data.date = data.date.map(function(d) { return new Date(d * 1000) })
    

    Also, it's common to write array names in plural, to improve readability and avoid extra confusion. Rename the date field to dates.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置