Format result in JSON with data returned every 30 minutes

-3

Not long ago, I asked this question: Retrieve parameter to filter in SQL: date and time every minute

Now I need the result to be in the same JSON format as below:

{label:'00:00', y:92 , indexLabel:'92'},
{label:'00:00', y:92 , indexLabel:'92'},
{label:'01:00', y:92 , indexLabel:'92'}

How to do it?

    
asked by anonymous 25.08.2016 / 17:57

1 answer

0

You can try the following code:

for($hora= 0; $hora < 24; $hora++){
    $hoje = new DateTime();
    for($minuto = 0; $minuto <= 30; $minuto += 30){
        $data_hora = $hoje->format('Y-m-d') . ' '  // dia mes e ano de hoje
            . str_pad($hora, 2,'0', STR_PAD_LEFT)   // hora do primeiro loop (formatado com zero à esquerda)
            . ':' . str_pad($minuto, 2,'0', STR_PAD_LEFT) . ':00'; // minutos do segundo loop (formatado com zero à esquerda)

        // nota: os segundos estão fixos em 00 (linha acima)


        $resultado[] = processa_query($data_hora ); // chama a função que irá processar o sql
    }
}

// monta o resultado em $JSON e exibe o mesmo, o implode junta a array em uma string
echo $JSON = '{ "dados":[' .  implode(', ', $resultado) . ']}';

function processa_query($data_hora){



    $sql = "SELECT valor FROM valores where data_hora < '$data_hora' order by id desc limit 1  ";
    $consulta = $pdo->query($sql);
    $resultado = $consulta->fetchAll(3);

    $valor_equipamento = $resultado[0][0];

    // através do explode, separo a data da hora (separados pelo espaço)
    $hora_minuto = explode(' ' ,$data_hora);
    // removo os segundos
    $hora_minuto = substr($hora_minuto[1], 0,5);
    // monto um item o JSON concatenando: 
    // label: recebe a variável $hora_minuto 
    // y: recebe o $valor_equipamento (sem aspas)
    // indexLabel: recebe o $valor_equipamento (com aspas)
    return "{label:'$hora_minuto', y:$valor_equipamento , indexLabel:'$valor_equipamento'}";
}
    
25.08.2016 / 18:11