Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, vejam bem, eu faço um cálculos entre horas que me resulta um valor em minutos 10,5mim bem eu preciso formatar isso para 10:30mim. Como faço isso ?
Outros exemplos
9 formatar para 09:00 mim
8 formatar para 08:00 mim
Como que 5 vai virar 30?
Eu entendi que 5 seria meia hora, assim como 30, mas se estiver gravando deste jeito ai, tem que rever. Tem coisa errada. Digo, porque qualquer conversor que te passarem provavelmente vai converter de 9,5 para 9:05, entendeu? Como que vai ser diferenciado? você vai ter que refazer teu sistema, gravar as horas em formato DateTime compatível, e então você pode formatar como quiser.
Aí sim, use essa classe:
/**
* Formata uma data para outra mascara sem usar o DateTime::createFromFormat
*
* @param string $dateStr
* @param string $outputFormat
* @throws InvalidArgumentException
* @author Hugo Ferreira da Silva
* @return string
*/
function parseDate($dateStr, $outputFormat = 'd/m/Y'){
$regs = array(
'@^(?<ano>\d{4})-(?<mes>\d{2})-(?<dia>\d{2})(?<hora>\s{1}\d{2})?(?<minuto>:\d{2})?(?<segundo>:\d{2})?$@',
'@^(?<dia>\d{2})/(?<mes>\d{2})/(?<ano>\d{4})(?<hora>\s{1}\d{2})?(?<minuto>:\d{2})?(?<segundo>:\d{2})?$@',
);
foreach($regs as $regex){
if(preg_match($regex, $dateStr, $reg)){
$hora = empty($reg['hora']) ? 0 : $reg['hora'];
$minuto = empty($reg['minuto']) ? 0 : str_replace(':', '', $reg['minuto']);
$segundo = empty($reg['segundo']) ? 0 : str_replace(':', '', $reg['segundo']);
$date = new DateTime();
$date->setDate($reg['ano'], $reg['mes'], $reg['dia']);
$date->setTime((float) $hora, (float) $minuto, (float) $segundo);
return $date->format($outputFormat);
}
}
throw new InvalidArgumentException('Invalid date value: '.$dateStr);
}Um dia precisei fazer algo semelhante, mas o resultado deveria ser mostrado em outro formato, exemplo: 1 dia, 18 horas e 30 minutos.
Então desenvolvi uma função para isso que resolveu o problema. Na realidade é a mesma coisa, basta você adaptá-lo como achar melhor.
<?php
function transformaHora($numero){
if(strstr($numero, ",")){
$h = explode(",", $numero);
} else {
$h = explode(".", $numero);
}
$horas = $h[0];
$minutos = "0.".$h[1];
$minutos = ($minutos * 100);
if($minutos > 0){
$minutos = round((60 * $minutos) / 100);
} else {
$minutos = 0;
}
if($horas > 23){
$dias = floor(($horas / 24));
$horas = ($horas - ($dias * 24));
if($dias == 1){
$dias = $dias." dia, ";
} else {
$dias = $dias." dias, ";
}
} else {
$dias = "";
}
if($horas == 1){
$horas .= " hora e ";
} else {
$horas .= " horas e ";
}
if($minutos == 1){
$minutos .= " minuto";
} else {
$minutos .= " minutos";
}
return $dias.$horas.$minutos;
}
echo transformaHora(64.50);
?>
Como vc está fazendo este cálculo?
Já tentou utilizar a classe DateTime?