Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite galera, estou com uma dúvida..
Estou fazendo um select em uma variavel e depois pego o valor da coluna ''data_inicio'' desse select e armazeno em uma variavel, e pego o valor da coluna ''data_fim'' e armazeno em outra variável.
Essas informações estão vindo em datetime do MySQL para mim. então no select eu faço
SELECT DATE_FORMAT(data_inicio, '%d/%m %H:%i') as data_inicio, DATE_FORMAT(data_fim , '%d/%m %H:%i') as data_fim FROM pixie_andon_nc.
$data_inicio = ['data_inicio'];
$data_fim = ['data_fim'];
para as data vir: DIA/MES Hora/Min ''08/10 18:25''
As duas data me trazem a informação correta, porém, agora eu preciso comparar essas duas datas e saber qual é a maior e a menor.
Estou fazendo a comparação porém, ele está levando em consideração somente o dia.
Por exemplo
Se a datas forem
inicio = 08/10 10:00
fim = 09/10 10>00
ele fala que o Inicio é menor que o FIm. até ai está ok.
agora se vira o mês, ele me trás divergência, por exemplo.
inicio = 08/10 10:00
fim = 01/11 10:00
ele fala que o inicio é maior, porque está considerando somente o dia, ou seja, o dia 8 é maior que o dia 01... porém está errado pq o dia 1 é do outro mêsInteressante, realmente liberei a data/hora igual deixou ai em cima e ele realizou a comparação correta.
Porém preciso mostrar na tela somente Dia/MES Hora/Min
como faço pra fazer isso agora sem estranhar a comparação?
Galera, está assim hoje
A Data no MySQL está cadastrada como YYYY-mm-dd 12:00:00
Eu preciso mostrar ela em formato 00/00 (dia/mes) 12:00 (hora:minuto) isso já esta fazendo, porém na hora de comparar a inicio_prev(data inicio previsto) com a inicio_prod (data inicio produção) ele está levando em consideração somente o dia. ou seja
Se o previsto for 29/09 e o produzido for dia 03/10 ele fala que o previsto é maior, porque não reconheceu a virada do mês.
Mas se eu deixo o select com as informações sem converter vindo em yyyy-mm-dd a comparação fica correta.
segue código da query, e do relatório e da comparação
$consulta = mysql_query("SELECT ordem, pedido, operacao, DATE_FORMAT(inicio_prev,'%d/%m %H:%i') as inicio_prev, DATE_FORMAT(fim_prev, '%d/%m %H:%i') as fim_prev, DATE_FORMAT(inicio_prod,'%d/%m %H:%i') as inicio_prod , DATE_FORMAT(fim_prod,'%d/%m %H:%i') as fim_prod FROM pixie_andon_nc where operacao = '$operacao' and DATE_FORMAT(inicio_prev, '%d/%m/Y') >= '$dlinicio' and DATE_FORMAT(fim_prev, '%d/%m/%Y') <= '$dlfim'");
while($registro = mysql_fetch_assoc($consulta))
{
echo '<td>'.$registro["ordem"].'</td>';
echo '<td>'.$registro["inicio_prev"].'</td>';
echo '<td>'.$registro["fim_prev"].'</td>';
//VARIAVEIS
$inicio_prev = $registro['inicio_prev'];
$inicio_prod = $registro['inicio_prod'];
$fim_prev = $registro['fim_prev'];
$fim_prod = $registro['fim_prod'];
if ($inicio_prev > $inicio_prod)
{
echo '<td>'.$registro["inicio_prod"].'</td>';
}
else
{
$color = data_maior_prevista($registro["inicio_prod"]);
echo "<td style='background: {$color}; color: #222;'>".$registro["inicio_prod"]."</td>";
}
if($fim_prev > $fim_prod)
{
echo '<td>'.$registro["fim_prod"].'</td>';
}
else
{
$color = data_maior_prevista($registro["fim_prod"]);
echo "<td style='background: {$color}; color: #222;'>".$registro["fim_prod"]."</td>";
}
}
function data_maior_prevista() $color = "#e60000";
return $color;
}No **SELECT **traz as datas SEM converte-las!.
No teu PHP tu converte para exibir.
$inicio_prev = date('d/m H:i', strtotime($registro['inicio_prev']));
$inicio_prod = date('d/m H:i', strtotime($registro['inicio_prod']));
e para comparar..
if (strtotime($registro['inicio_prev']) > strtotime($registro['inicio_prod'])) {
echo '<td>'.$inicio_prod.'</td>';
}
...>
53 minutos atrás, Draco Malfoy disse:
No **SELECT **traz as datas SEM converte-las!.
No teu PHP tu converte para exibir.
$inicio_prev = date('d/m H:i', strtotime($registro['inicio_prev']));
$inicio_prod = date('d/m H:i', strtotime($registro['inicio_prod']));
e para comparar..
if (strtotime($registro['inicio_prev']) > strtotime($registro['inicio_prod'])) {
echo '<td>'.$inicio_prod.'</td>';
}
...
Perfeito meu amigo.
Deu certinho!! Muito obrigado pela solução!!
Obrigado a todos pela ajuda!!
Sempre que for fazer comparações deste tipo use uma data/hora completa, exemplo:
2017-10-01 10:00:00
O que está ocorrendo no seu caso é exatamente pelo modo como o PHP faz a comparação, nesse caso caractere por caractere.