PHP come convertire un orario espresso in ore, minuti e secondi in un valore decimale di ore (e viceversa).

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

Torna in alto