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 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥15 this signal is connected to multiple drivers怎么解决
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥60 关机时蓝屏并显示KMODE_EXCEPTION_NOT_HANDLED,怎么修?
  • ¥66 如何制作支付宝扫码跳转到发红包界面