<?php
/**
 * Umrechnen formatierter Zeitangaben in Sekunden
 * @author: Jörg Reinholz, fastix WebDesign & Consult, Kassel - http://www.fastix.org/
 * @version: 1.0.1
**/

function TimeNormalizer ($t) {

    $t = trim($t);

    if ( '-' == $t[0] ) {
        $t = ltrim($t, '-');
        $isNegativ = true;

    } else {
        $isNegativ = false;
    }

    $arTupels = preg_split('/[^0-9,.]+/', $t);

    if (! $arTupels[count($arTupels)-1] ) {
        array_pop($arTupels);
    }

    # Tests:
     if ( count($arTupels) > 4 ) {
        error_log("Unzulässige Anzahl von Zifferngruppen in zu verarbeitender Eingabe: '$t'");
        return false;
    }

    $arTupels = array_reverse($arTupels);
    $s = 0;
    $arFaktors = array(1, 60, 3600, 86400);
    for ($i  = 0; $i < count($arTupels); $i++) {
        $arTupels[$i] = str_replace(',', '.', $arTupels[$i]);
        $s = $s + $arTupels[$i] * $arFaktors[$i];
    }

    if ($isNegativ) {
        return ( $s * -1 );
    } else {
        return $s;
    }
}

### Funktionstests:
# (Einschalten durch Änderung von /* zu #/* in der nächsten Zeile)
#/*

testTimeNormalizer('30');
testTimeNormalizer('-30.6');
testTimeNormalizer('90');
testTimeNormalizer('20:30');
testTimeNormalizer('-20:30');
testTimeNormalizer('-20:30,6');
testTimeNormalizer('10:20:30');
testTimeNormalizer('-10:20:30');
testTimeNormalizer('1 10:20:30');
testTimeNormalizer('-1 10:20:30');
testTimeNormalizer('-1T 10:20:30,6');
testTimeNormalizer('1 Tag  10 Stunden  20 Minuten und 30,6 Sekunden');
testTimeNormalizer('-5d 10h 20m 30,6s');

function testTimeNormalizer($v) {
    echo "Eingabe:   $v\n";
    $w = TimeNormalizer($v);
    $r = abs($w);
    echo "errechnet: $w \n";
    echo "absolut:   $r \n";

    $d = floor ( $r / 86400 );
    echo "Tage:      $d \n";
    $r = $r - $d * 86400;

    $h = floor ( $r / 3600 );
    echo "Stunden:   $h \n";
    $r = $r - $h * 3600;

    $m = floor ($r / 60 );
    echo "Minuten:   $m \n";
    $r = $r - $m * 60;

    $s = round($r, 2);

    echo "Sekunden:  $s \n\n";
}

#*/