在循环中转换循环中的日期

时间:2014-01-20 10:00:53

标签: php mysql while-loop

所以我有一个MySQL查询加入一个数组来清理它以满足图形库的需要。我试图将目前采用24小时格式的小时转换为稍微漂亮的12小时格式。但是当我这样做时,它会在一次迭代后杀死循环,因此只有一个值被输入到图形中(而不是整天的值)。我是PHP的新手,所以我不确定是什么打破了这一点。完成我需要做的事情的正确方法是什么?

$data = $conn->query('SELECT HOUR( TIMESTAMP ) AS HOUR , COUNT( DISTINCT detected_key ) AS num_rows
            FROM Visitors
            WHERE TIMESTAMP >= NOW( ) - INTERVAL 1 DAY 
            GROUP BY HOUR( TIMESTAMP ) 
            ORDER BY  `id` ASC 
            LIMIT 0 , 24');

while($row = $data->fetch(PDO::FETCH_ASSOC)) {
    $prettytime  = DATE("g:i a", STRTOTIME($row['HOUR']));
    $visit[$prettytime]= $row['num_rows'];  
}

编辑:我尝试使用DATE_FORMAT,但仍然只是输出为24h格式。我在MySQL网站上找到的唯一文档总是在SELECT之后立即使用。

SELECT DATE_FORMAT( TIMESTAMP,  "%l:%i %a" ) , HOUR( TIMESTAMP ) AS HOUR , COUNT( DISTINCT detected_key ) AS num_rows
FROM Visitors
WHERE TIMESTAMP >= NOW( ) - INTERVAL 1 DAY 
GROUP BY HOUR( TIMESTAMP ) 
ORDER BY  `id` ASC 
LIMIT 0 , 24

以下是the website,您可以在其中查看图表。使用上述查询的是左上图。

1 个答案:

答案 0 :(得分:1)

这似乎从定义为

的数据库字段中可以很好地工作
`thetime` timestamp NULL DEFAULT CURRENT_TIMESTAMP

然后使用MySQL DATE_FORMAT()和HOUR()函数: -

SELECT thetime, DATE_FORMAT(thetime, '%r') from test_table

给出结果: -

2014-01-20 10:57:45, 10:57:45 AM
2014-01-20 23:59:31, 11:59:31 PM

或者

SELECT thetime, HOUR(DATE_FORMAT(thetime, '%r')) from test_table

给予: -

2014-01-20 10:57:45, 10
2014-01-20 23:59:31, 11