code.fastix.org

Dateiansicht:

Datei:Projekte -> PHP:Zeitangaben normalisieren -> TimeNormalizer.php
md5:b66afceeae2f1a232e9eb4c32aed0e04
sha1:831707dbf4649eeed84130ab955338a98669f39f
  1. <?php
  2. /**
  3.  * Umrechnen formatierter Zeitangaben in Sekunden
  4.  * @author: Jörg Reinholz, fastix WebDesign & Consult, Kassel - http://www.fastix.org/
  5.  * @version: 1.0.1
  6. **/
  7.  
  8. function TimeNormalizer ($t) {
  9.  
  10.     $t = trim($t);
  11.  
  12.     if ( '-' == $t[0] ) {
  13.         $t = ltrim($t, '-');
  14.         $isNegativ = true;
  15.  
  16.     } else {
  17.         $isNegativ = false;
  18.     }
  19.  
  20.     $arTupels = preg_split('/[^0-9,.]+/', $t);
  21.  
  22.     if (! $arTupels[count($arTupels)-1] ) {
  23.         array_pop($arTupels);
  24.     }
  25.  
  26.     # Tests:
  27.     if ( count($arTupels) > 4 ) {
  28.         error_log("Unzulässige Anzahl von Zifferngruppen in zu verarbeitender Eingabe: '$t'");
  29.         return false;
  30.     }
  31.  
  32.     $arTupels = array_reverse($arTupels);
  33.     $s = 0;
  34.     $arFaktors = array(1, 60, 3600, 86400);
  35.     for ($i  = 0; $i < count($arTupels); $i++) {
  36.         $arTupels[$i] = str_replace(',', '.', $arTupels[$i]);
  37.         $s = $s + $arTupels[$i] * $arFaktors[$i];
  38.     }
  39.  
  40.     if ($isNegativ) {
  41.         return ( $s * -1 );
  42.     } else {
  43.         return $s;
  44.     }
  45. }
  46.  
  47. ### Funktionstests:
  48. # (Einschalten durch Änderung von /* zu #/* in der nächsten Zeile)
  49. #/*
  50.  
  51. testTimeNormalizer('30');
  52. testTimeNormalizer('-30.6');
  53. testTimeNormalizer('90');
  54. testTimeNormalizer('20:30');
  55. testTimeNormalizer('-20:30');
  56. testTimeNormalizer('-20:30,6');
  57. testTimeNormalizer('10:20:30');
  58. testTimeNormalizer('-10:20:30');
  59. testTimeNormalizer('1 10:20:30');
  60. testTimeNormalizer('-1 10:20:30');
  61. testTimeNormalizer('-1T 10:20:30,6');
  62. testTimeNormalizer('1 Tag  10 Stunden  20 Minuten und 30,6 Sekunden');
  63. testTimeNormalizer('-5d 10h 20m 30,6s');
  64.  
  65. function testTimeNormalizer($v) {
  66.     echo "Eingabe:   $v\n";
  67.     $w = TimeNormalizer($v);
  68.     $r = abs($w);
  69.     echo "errechnet: $w \n";
  70.     echo "absolut:   $r \n";
  71.  
  72.     $d = floor ( $r / 86400 );
  73.     echo "Tage:      $d \n";
  74.     $r = $r - $d * 86400;
  75.  
  76.     $h = floor ( $r / 3600 );
  77.     echo "Stunden:   $h \n";
  78.     $r = $r - $h * 3600;
  79.  
  80.     $m = floor ($r / 60 );
  81.     echo "Minuten:   $m \n";
  82.     $r = $r - $m * 60;
  83.  
  84.     $s = round($r, 2);
  85.  
  86.     echo "Sekunden:  $s \n\n";
  87. }
  88.  
  89. #*/