Avendo a che fare con orari espressi in ore, minuti e secondo nel classico formato PHP ‘H:i:s’, esempio 09:23:40 (ore 9, ventitré minuti e 40 secondi, ed avendo necessità di manipolare l’orario aggiungendo per esempio un determinato numero di ore può essere comodo poter esprimere lo stesso orario come un valore decimale (floatval).
Nel caso dell’esempio: 09:23:40 può essere espresso come: 9,3944444444.
Di seguito 2 semplici function() che trasformano l’orario in formato ‘H:i:s’ in un valore float e viceversa:
function time2float($time) {
$valore = explode(":", $time);
return $valore [0] + ($valore [1] / 60) + ($valore [2] / 60 /60);
}
function float2time($float) {
$ore = floor($float);
$decimaliMinuti = $float - $ore;
$minutiFloat = $decimaliMinuti * 60;
$minuti = floor($minutiFloat);
$decimaliSecondi = $minutiFloat - $minuti;
$secondiFloat = $decimaliSecondi * 60;
$secondi = floor($secondiFloat);
if ($ore < 10) {
$ore = '0'.strval($ore);
} else {
$ore = strval($ore);
}
if ($minuti < 10) {
$minuti = '0'.strval($minuti);
} else {
$minuti = strval($minuti);
}
if ($secondi < 10) {
$secondi = '0'.strval($secondi);
} else {
$secondi = strval($secondi);
}
return $ore.':'.$minuti.':'.$secondi;
}
La seconda funzione restituisce una valore di tipo stringa che rappresenta l’orario nel formato ‘H:i:s’, deve eventualmente essere trasformato in una oggetto di tipo DateTime cone le funzioni:
date_create_from_format
DateTime::createFromFormat()
https://www.php.net/manual/en/function.date-create-from-format.php